是否可以使用与以下内容匹配的正则表达式匹配器:
我需要知道是否存在匹配括号内部和外部的子字符串,格式为(@ …)
我需要知道是否存在匹配括号内部和外部的子字符串,格式为(@ …)
匹配的例子:
> abc(@ abc)
> abc(@(& abc))
> abc(& def(@ abc))
>(&(& abc def)(@ abc))
>(& def(& abc)(@ abc))
不匹配的例子:
> abc
>(@ abc)
> abc(@ def)
> abc(& abc)
编辑:
这是检查正则表达式的rspec规范.只有2次测试失败:
“(@ abc)abc”应该匹配
“(@ abc)(@ abc)”不应该匹配
describe "regex" do let(:regex) { /(.+).*\(@.*\1.*\)/ } matches = ["abc (@ abc )","(@ abc ) abc","abc (@ (& abc ) )","abc (@ (& abc ) )"] no_matches = ["abc","(@ abc )","abc def","abc abc","abc (& abc)","(@ abc ) (@ abc)"] matches.each do |flow| it "should match '#{flow}'" do flow.should match regex end end no_matches.each do |flow| it "should not match '#{flow}'" do flow.should_not match regex end end end
解决方法
尝试使用正则表达式模式
/(?=.*?(?<!@ )(\b\w+\b)).*\(@.*\1.*\)/