我想知道是否有某种方式来证明分组是否产生了匹配。例如,让我们看看我想用以下2个字符串完成的任务:
string 1: "start magic someword anotherword test end"
string 2: "start test x y z end"
我想获取包含关键字magic
和test
(两者都有)的字符串。但是有一些问题:
magic
和test
可能不会相互连续。例如,start magic word1 test word2 end
magic
和test
可能不在字符串中的顺序,即应为start magic test end
和start test magic end
匹配。为了解决这个问题,我采用了以下正则表达式:
start ((w1)*(w2)*\[^(end)])+end
......这意味着:
start
开头,并以end
结束。 w1
和w2
,并使用end
消费其他不是[^(end)]
的字词。正则表达式的问题在于,所有字符串都因[^(end)]
而匹配,我需要在实际字符串中放弃w1
和w2
之间的单词。
将正则表达式与字符串1匹配,它将是:
start ((magic)*(test)*[^(end)])+end
...它应该只匹配字符串1(这就是我想要的)。但是字符串2也匹配。
是否有任何形式的检查分组是否已与正则表达式引擎匹配?像(if \1 != null)
这样的内容可以检查是否遇到了magic
和test
个关键字?我必须使用正则表达式,因为我无法在源代码中处理它。它旨在使用命令行调用的工具。
答案 0 :(得分:0)
此表达式将:
start
开头,后跟空格end
magic
和test
magic
和test
必须至少包含一个空格 ^start(?=\s)(?=.*\smagic(?=\s))(?=.*\stest(?=\s)).*\send(\r|\n|\Z)
输入文字
start magic someword anotherword test end
start test x y z end
start the a magic show with Gob and Tony Wonder who will test till the end
**输出
[0] => start magic someword anotherword test end
[1] => start the a magic show with Gob and Tony Wonder who will test till the end
答案 1 :(得分:0)
最后,我删除了作为标记的开始和结束,并将它们替换为**。表达式现在是
"\*\* [^\*]*(w1|w2)[^\*]*(w1|w2)[^\*]* \*\*"
匹配字符串"** whatever w1|w2 whatever w1|w2 whatever **"
并且不匹配"** whatever w1|w2 ** w1|w2 **"
@Denomales,你能告诉我你从哪里得到这张照片吗?谢谢