今天,对于一个项目,我试图利用正则表达式,了解群组以及如何使用它们。我正在使用this网站来测试它。问题是每当我编写以下正则表达式时:
(?= \ S * \ d)
,该网站给了我一个错误:the expression can match 0 characters and therefore can match infinitely.
虽然这不会引起任何错误:
(?= \ S * \ d)(\ S {6,16})
任何人都可以向我解释错误的含义。
答案 0 :(得分:3)
因为展望是断言,他们不会消耗任何字符。
(?=\S*\d)
当您编写这样的正则表达式时, 检查 ,如果它包含零个或多个非空格后跟一个数字。但是这些字符不会被正则表达式引擎消耗掉。指针保持在同一位置。
示例强>
hello123
|
This is the initial position of pointer. It the checking starts from here
hello123
|
(?=\S*\d). Here it matches \S
hello123
|
(?=\S*\d)
This continues till
hello123
|
(?=\S*\d) Now the assertion is matched. The pointer backtracks to the position from where it started looking for regex.
hello123
|
Now you have no more pattern to match. For the second version of the regex, the matching then begins from this postion
那么与
有什么不同(?=\S*\d)(\S{6,16})
下面,
(?=\S*\d)
这部分进行检查。我再说一遍,这部分不消耗任何字符,只是检查。
(\S{6,16})
此部分消耗输入字符串中的字符。也就是说,它至少消耗6
个非空格字符和最多16
个字符。