0

使用正则表达式,我需要在以特定字符开头的字符串中找到一个单词。单词必须是字母数字,但可以在单词中包含下划线 (_)。单词开头和结尾的下划线是不可接受的。

例如,我有以下字符串。

@word1 消息@@ 消息@ 消息@word2_ 消息@word#3 @_word4 消息@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 回答