我正在尝试找出如何改进当前的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,其中包含多个()
组,我想避免根据匹配的条件检查哪个封装组匹配带有或不带有#
附件的字符串。
答案 0 :(得分:4)
请尝试这种模式。首先,捕获#
或space
,然后最后将其用作反向引用
([# ])string\1
答案 1 :(得分:0)
根据@minhazur的回答,您可以执行以下操作搜索周围的人群:
((#)|(@))string\1
这将识别#string#
和@string@
,但是,这对于检测是否没有匹配的字符...(即string
)不起作用
这将通过以下方式捕获:
((#)|(?!#))string\1
但这仍然与#string
和string#
匹配。
编辑
实际上,((#)|(?!#))string\1
将匹配正确的内容([]之间匹配的字符串):
#string# --> Matches [#string#]
string --> Matches [string]
#string --> Matches #[string]
string# --> Matches [string]#
看看FreeFormatter来检查您的正则表达式。