有什么区别:
^(?!.*baa)[abc]*$
和
^(?!baa)[abc]*$
.*
的作用是什么。我知道这意味着任何字符0次或更多次,但为什么第二次捕获字符串如cccaabaa
应该被丢弃?
答案 0 :(得分:2)
它们之间的区别是:
^(?!.*baa)
要求输入中的baa
不能任何地方 ^(?!baa)
要求baa
不在输入的 .*
允许任何内容在开始^
和baa
之间。
答案 1 :(得分:0)
^(?!。* baa)[abc] * $ - 从当前位置开始(此处由于开始 ^),消耗整个字符串然后回溯以查找是否存在 字符串中的任何位置都没有
的组合baa
。现在,前瞻匹配的位置(此处开始)检查 以下是a
,b
和c
^(?!baa)[abc] * $ - 从当前位置开始(此处由于开始 ^)检查以下内容 不是
baa
。baa
可以在任何地方,但不是在开始。
答案 2 :(得分:0)
(?! )
是一个负向前瞻:它指定了一个无法匹配的组。
在^(?!baa)[abc]*$
中,您正在寻找一个不以“baa”开头并且只包含ab或c中的字符的字符串:cccaabaa
匹配:它不以“baa”开头
在^(?!.*baa)[abc]*$
中,您正在寻找的字符串不会以baa后面的任何内容开头,并且只包含来自ab或c的字符:cccaabaa
不匹配,因为它以“ cccaa跟随baa“