正则表达式必须找到包含数字的单词。如果单词符号包含$ @,则它不再起作用

时间:2017-08-16 09:20:56

标签: regex

我试过了:

\b[\w\@$]*[\d]+[\w\@$]*\b

但它与$1$@1@不符。但确实需要a1a_1_。为什么呢?

Here是测试

这不是重复,因为所有现有问题都是关于一个单词,包含一个数字,但没有将@ $添加到单词符号。而这就是陌生感。

1 个答案:

答案 0 :(得分:1)

在分享解决方案之前,请先了解your regex matches 1$1$1。匹配的原因是\b[\w\@$]*[\d]+[\w\@$]*\b需要word boundary,然后是0或更多字或@$字符,尾随部分匹配0+字/ { {1}} / $字符后面再加上一个单词边界。

请参阅@的regex101说明: \b在字边界(\b)声明位置。这意味着要匹配^\w|\w$|\W\w|\w\W\b@\b\$@之前必须有字词char。要匹配$@\b\$\b / $后必须有字词char。

现在,您需要的是自定义字边界,这通常可以通过外观来实现。

@

请参阅regex demo

如果当前位置左侧有一个单词/ (?<![\w@$])[\w@$]*\d[\w@$]*(?![\w@$]) ^^^^^^^^^^^ ^^^^^^^^^^ / (?<![\w@$])字符,且@$,那么(?![\w@$])是一个负面的后置效果,导致匹配失败如果当前位置右侧有一个单词/ @ / $字符,则表示匹配失败的否定前瞻。