2009-04-01 8 views
0

私はいくつかの正規表現を持っています(^ \ w + [\ w-。] \ @ \ w +(( - w \)|(\ w))。[az] {2,3} $、 )しかし、私は文字列の正規表現と一致しないすべてのものを取り除く方法を見つけることができません。Regexp:別のregexpを除くすべてを削除するには?

電子メールの例を維持、私はには、電子メールがない場合、

$myString = "This is some text, the email is here [email protected], and other things over here"; 

のような刺す与えられた私は、単に「[email protected]」、またはブール値falseを返す必要がする方法が必要です文字列。もちろん

、電子メールは一例であり、他のいくつかの時間が私は、整数/浮動小数点数などを除いてすべてを削除する必要があります...

私の周りそんなにGoogleで検索しましたが、見つかりませんでした何でも

答えて

4

あなたは括弧であなたの正規表現を囲み、preg_matchまたはpreg_match_allを使用している場合は、それが唯一の正規表現にマッチした文字列の一部を返します。

$myString = "This is some text, the email is here [email protected], and other things over here"; 
preg_match("/(\w+[\w-.]\@\w+((-\w+)|(\w)).[a-z]{2,3})/", $myString, $matches); 
print_r($matches); 

注意私も、最初と最後のを脱ぎましたこの場合のように文字列区切り文字は必要ありません。

1

preg_match_all functionをすべて使用してください。 preg_match_all関数自体は、エラーが発生した場合はfalseの一致数を返します。

ので:あなたの正規表現が動作するために取り外した$および^を持っている必要があります

$myString = "This is some text, the email is here [email protected], and other things over here"; 
if (($num = preg_match_all('/\w+[\w-.]\@\w+((-\w+)|(\w)).[a-z]{2,3}/', $myString, $matches)) !== false) { 
    echo $num.' matches have been found.'; 
    var_dump($matches); 
} else { 
    // error 
} 
0

、それらのシンボルは、文字列の途中で見つけることができません。あなたの正規表現が一致すれば、電子メール以外は何も含まれていない可能性があります。

関連する問題