本帖最后由 fang5072546 于 2018-7-21 17:10 编辑
你这个问题很好解释啊,首先,抛开?!语法不说,你有自己测试过(?s)(test123.*test2222)这句匹配的内容?自己可以用
(?s)(?!test123.*test2222).*测试,发现除了<以外的所有字符都在匹配范围,换句话说,你其实寻找的条件是你那字符串除了<之外的所有字符串中查找a开头,后面紧跟着任意数字的字符,很显然,所有带a的都匹配上了,这是意料之中.
关于4楼说的矛盾,其实你这样去理解就可以茅塞顿开了.假设有一段话,
我是正则表达式测试 你要找的是<!正则表达式测试>.正则表达式是一个个字符串去跟条件匹配的,虽然我们的表达式是多个字符串,但是正则表达式在匹配的时候,其实是把他解释为单个字符串的.具体的可以找个带DEBUG的工具,看看回溯机制以及匹配次数就知道了.正则表达式在执行的时候,就会检索,从我开始,发现后面不是正则表达式测试,那么他就匹配上了,然后从是开始,发现后面是正则表达式测试,这时候他就会标记是为未匹配,然后从正开始,正后面跟的是则表达式,并不是我们的条件正则表达式,所以正也匹配上了,以及类推,则,表..所以我们的语句最终的匹配结果是我正则表达式测试. |