1

私は正規表現が本当に苦手です。

    /(@[A-Za-z-]+)/

これは、テキスト ボックス内の @ 記号の後の単語を検索しますが、次のようなメール アドレスを無視する必要があります。

    foo@things.com

ただし、@things が見つかります

次のような数字を含める必要もあります。

    @He2foo

ただし、@He 部分のみが検出されます。

助けていただければ幸いです。正規表現を簡単な言葉で説明したい場合は、それは素晴らしいことです:D

4

2 に答える 2

1

次のように、正規表現に 0-9 を追加するだけです。

/(@[A-Za-z0-9-]+)/

一人でここまで来れたのですから、これ以上の説明は必要ないと思います。0-9と同じですa-z(もちろん数値ですが)。

メールアドレスを無視するには、より具体的な要件を提供する必要があります。基本的に、値の前に文字列の先頭 (実際には何もありません) またはスペースのいずれかが必要であると述べている先行@を試すことができます。(^| )

これを拡張して、最後に使用($| )して、値の後に文字列の末尾またはスペースが続くことを要求することもできます (つまり、有効な電子メール アドレスの要件であるピリオドは許可されません)。

アップデート

$subject = "@a @b a@b a@ @b";
preg_match_all("/(^| )@[A-Za-z0-9-]+/", $subject, $matches);
print_r($matches[0]);
于 2013-05-15T14:07:32.887 に答える
1
/(?:^|(?<=\s))@([A-Za-z0-9]+)(?=[.?]?\s)/

@This(一致した) 正規表現ignores@thisですが、@separateトークンと文末の@this.orのようなトークンに一致します@this?(または を選択せず.​​に?) yesemail@addresses.comも無視されます。

正規表現 while matching onを使用すると、正規表現を選択することで、( のように)@その後にあるものにすばやくアクセスできます。正規表現グループの操作方法については、PHP のドキュメントを確認してください。userid@useridgroup(1)

于 2013-05-15T14:34:01.397 に答える