この正規表現/\@[a-z0-9]+/i
はpreg_match_all()
、@az? の最初の出現のみに一致します。
これをphpで使用する:preg_match_all('/\@[a-z0-9]+/i', $input, $matches)
単純なミス?
@
これは、 の後に任意の文字が続くすべてのインスタンスに一致します:a-z
またはA-Z
または0-9
(1 回以上)。
また、 here をエスケープする必要はありません@
。
<?php
$text = <<<T
@fooo
@bar1234
@stackoverflow
T;
preg_match_all('/@[a-z0-9]+/i', $text, $matches);
print_r($matches);
?>
出力
Array
(
[0] => Array
(
[0] => @fooo
[1] => @bar1234
[2] => @stackoverflow
)
)
1 つだけの @ に一致し、次に 1 つ以上の文字/数字 (+ のため) に一致します。
あなたの正規表現は、末尾の i で大文字と小文字を区別しません。
したがって、「@a」、「@aaaAAAAzZZeeEErrRttT1234」には一致しますが、「@@aaa」には一致しません。
preg_match_all と組み合わせた正規表現は正しいです。よくわからない場合は、簡単なテスト スクリプトを作成してください。
<?php
$input = '@a @b';
preg_match_all('/\@[a-z0-9]+/i', $input, $matches);
var_dump($matches);
?>
より簡単な正規表現が必要な場合は、/@\w+/
.