是否有一个简单的RegEx,用于带CHAR的WITH或WITHOUT字符串?

时间:2019-06-11 08:14:39

标签: java regex regex-group

我正在尝试找出如何改进当前的RegEx。现在,无论是否用#?string#?包围,我都使用类似#的字符串来匹配它。可悲的是,这与我只希望匹配2的所有4个版本匹配:

#string# : matched
#string  : matched – but I don't want it to
 string# : matched – but I don't want it to
 string  : matched

如何根据开头#的存在来进行结尾#

我知道我可以参加(#string#|string),但我的string是一个相当复杂的RegEx,其中包含多个()组,我想避免根据匹配的条件检查哪个封装组匹配带有或不带有#附件的字符串。

2 个答案:

答案 0 :(得分:4)

请尝试这种模式。首先,捕获#space,然后最后将其用作反向引用

([# ])string\1

答案 1 :(得分:0)

根据@minhazur的回答,您可以执行以下操作搜索周围的人群:

((#)|(@))string\1

这将识别#string#@string@,但是,这对于检测是否没有匹配的字符...(即string)不起作用

这将通过以下方式捕获:

((#)|(?!#))string\1

但这仍然与#stringstring#匹配。

编辑

实际上,((#)|(?!#))string\1将匹配正确的内容([]之间匹配的字符串):

#string# --> Matches [#string#]
string   --> Matches [string]
#string  --> Matches #[string]
string#  --> Matches [string]#

看看FreeFormatter来检查您的正则表达式。