我遇到了reg ex表达式的问题,无法找到问题的答案。
我正在尝试构建一个reg ex模式,它将引入任何围绕它们的#匹配。例如#matre#或#mt#都会回来。
这适用于此。 #.*?#
但是我不希望##上的比赛显示出来。基本上如果英镑符号之间没有任何东西不匹配。
希望这是有道理的。 感谢。
答案 0 :(得分:5)
请使用+
匹配1个或多个符号:
#+.+#+
<强>更新强>: 如果您只想匹配用单个哈希符号括起来的子串,请使用:
(?<!#)#(?!#)[^#]+#(?!#)
请参阅regex demo
解释:
(?<!#)#(?!#)
- 一个#
符号,前面没有#
(由于负面的后瞻(?<!#)
),后面没有#
(由于否定前瞻(?!#)
)[^#]+
- #
以外的一个或多个符号(由于否定的字符类[^#]
)#(?!#)
- #
符号未跟随另一个#
符号。答案 1 :(得分:2)
不是使用*
来匹配零和无限制字符,而是将其替换为+
,只有在#
&#39;之间至少有一个字符时才匹配#.+?#
。秒。编辑后的正则表达式应如下所示:#+.+?#+
。希望这有帮助!
修改强>
对不正确的正则表达式,我没想到有多个哈希标志。这适用于您的句子:(?<!#)#[^#].*?#
修改2
我很确定我明白了。试试这个:{{1}}。尽管如此,它可能无法正常工作。
答案 2 :(得分:1)
尝试:
[^#]?#.+#[^#]?
[^ character_group]构造匹配字符组中未包含的任何单个字符。使用 ?之后它会让你在字符串的开头/结尾匹配(因为它匹配前面的字符零或更多次。请查看文档here