锚定正则表达式和非锚定正则表达式有什么区别?

What is the difference between an anchored regex and an un-anchored regex?

提问人:sdgfsdh 提问时间:3/2/2017 更新时间:3/2/2017 访问量:6929

问:

锚定正则表达式和非锚定正则表达式有什么区别?

此处的用法:

...这些应该被指定为一个对列表,其中第一个元素是未锚定的正则表达式(在 java.util.regex.Pattern 语法中),与平台名称匹配......

正则表达式

评论


答:

22赞 Wiktor Stribiżew 3/2/2017 #1

未锚定的正则表达式是指没有锚点的正则表达式模式,用于字符串的开头和字符串的结尾,因此允许部分匹配。例如,在 Java 中,方法可以在输入字符串中搜索部分匹配项,将在 中找到匹配项。锚定模式将与字符串匹配,但在 中找不到匹配项。^$Matcher#find()"a.c""1.0 abc.""^a.c$""abc""1.0 abc."

此外,未锚定的正则表达式可能意味着处理正则表达式模式的代码不检查匹配项是否等于完整输入字符串。例如,在 Java 中,method 要求模式必须与完整的输入字符串匹配,并且将匹配字符串,但在 中找不到匹配项。Matcher#matches()s.matches("a.c")"abc""1.0 abc."

锚定正则表达式意味着只有当整个字符串匹配时,模式才会匹配一个字符串。

有关正则表达式中锚点的更多信息,请参阅字符串的开始和字符串的结束

评论

1赞 Wiktor Stribiżew 3/2/2017
顺便说一句,Scala 示例可能更具说明性(参见 Scala 正则表达式锚定示例)。 或者对字符串的行为会有所不同。"pattern".r.anchored"pattern".r.unanchored"A pattern"