0

正規表現を使用して、特定の文字で始まる文字列内の単語を見つける必要があります。単語は英数字である必要がありますが、単語内にアンダースコア(_)を含めることができます。単語の最初と最後にアンダースコアを付けることはできません。

たとえば、次の文字列があります。

@word1メッセージ@@メッセージ@メッセージ@word2_メッセージ@word#3 @ _word4 mesagge @ word_5

結果は次のようになります。

@ word1 @ word_5

ありがとう。

4

3 に答える 3

2

正規表現パターンを使用する

(?:^|(?<=\s))@(?!_)\w+(?<!_)(?:(?=\s)|$)

また

(?:^|(?<=\W))@(?!_)\w+(?<!_)(?:(?=\W)|$)

あなたが何を必要とするか/前に/後ろに置きたいかによって異なります...

たとえば、@word1in@word_5 @word1. @word#2 @word*3が一致する必要がある場合、ドット.を区切り文字または文の終わりと見なします。

于 2012-08-21T01:32:19.380 に答える
1

これは機能します-境界(1行目と3行目)はかなり重いです。これ\bは、「@ word#3」と「d」の後の「#」文字を一致させたくないため、単語の境界がここでは機能しないためです。 "は単語の境界をトリガーします。

(?<=\s|^)
    @(?!_)\w+(?<!_)
(?=\s|$)
于 2012-08-21T03:14:48.393 に答える
1

この正規表現はそれを行います!

(?<=(^|\s))@([a-zA-Z0-9]{1}\w*[a-zA-Z0-9]|[a-zA-Z0-9]{1})(?=(\s|$))

一文字にも一致します

于 2012-08-21T03:57:12.720 に答える