正規表現を使用して、特定の文字で始まる文字列内の単語を見つける必要があります。単語は英数字である必要がありますが、単語内にアンダースコア(_)を含めることができます。単語の最初と最後にアンダースコアを付けることはできません。
たとえば、次の文字列があります。
@word1メッセージ@@メッセージ@メッセージ@word2_メッセージ@word#3 @ _word4 mesagge @ word_5
結果は次のようになります。
@ word1 @ word_5
ありがとう。
正規表現を使用して、特定の文字で始まる文字列内の単語を見つける必要があります。単語は英数字である必要がありますが、単語内にアンダースコア(_)を含めることができます。単語の最初と最後にアンダースコアを付けることはできません。
たとえば、次の文字列があります。
@word1メッセージ@@メッセージ@メッセージ@word2_メッセージ@word#3 @ _word4 mesagge @ word_5
結果は次のようになります。
@ word1 @ word_5
ありがとう。
正規表現パターンを使用する
(?:^|(?<=\s))@(?!_)\w+(?<!_)(?:(?=\s)|$)
また
(?:^|(?<=\W))@(?!_)\w+(?<!_)(?:(?=\W)|$)
あなたが何を必要とするか/前に/後ろに置きたいかによって異なります...
たとえば、@word1
in@word_5 @word1. @word#2 @word*3
が一致する必要がある場合、ドット.
を区切り文字または文の終わりと見なします。
これは機能します-境界(1行目と3行目)はかなり重いです。これ\b
は、「@ word#3」と「d」の後の「#」文字を一致させたくないため、単語の境界がここでは機能しないためです。 "は単語の境界をトリガーします。
(?<=\s|^)
@(?!_)\w+(?<!_)
(?=\s|$)
この正規表現はそれを行います!
(?<=(^|\s))@([a-zA-Z0-9]{1}\w*[a-zA-Z0-9]|[a-zA-Z0-9]{1})(?=(\s|$))
一文字にも一致します