我试过了:
\b[\w\@$]*[\d]+[\w\@$]*\b
但它与$1$
或@1@
不符。但确实需要a1a
或_1_
。为什么呢?
Here是测试
这不是重复,因为所有现有问题都是关于一个单词,包含一个数字,但没有将@ $添加到单词符号。而这就是陌生感。
答案 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@$])
是一个负面的后置效果,导致匹配失败如果当前位置右侧有一个单词/ @
/ $
字符,则表示匹配失败的否定前瞻。