根据我对正则表达式的理解,字符串"00 ###"必须与"[0-9]"匹配,但不能与"^ [0-9] $"匹配.但它不适用于Java regexp.
在对此问题进行一些调查后,我发现了以下信息(http://www.wellho.net/solutions/java-regular-expressions-in-java.html):
可能看起来Java正则表达式默认使用^和$字符锚定.
我们可以确定所有版本的JDK都适用吗?并且可以关闭此模式(即禁用^和$的默认锚定)?
Mar*_*ers 24
正如您链接的文章所解释的那样,它取决于您调用的功能.如果您想默认添加^和$,请使用String#matches或Matcher#matches.如果您不想这样,请改用该Matcher#find方法.
import java.util.regex.*;
public class Example
{
public static void main(String[] args)
{
System.out.println("Matches: " + "abc".matches("a+"));
Matcher matcher = Pattern.compile("a+").matcher("abc");
System.out.println("Find: " + matcher.find());
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Matches: false
Find: true
Run Code Online (Sandbox Code Playgroud)
是的,matches()总是表现得好像正则表达式被锚定在两端。要获得传统行为,即匹配目标的任何子字符串,您必须使用find()(正如其他人已经指出的那样)。很少有正则表达式工具提供与 Javamatches()方法等效的任何内容,因此您的困惑是有道理的。我能想到的唯一另一种是XML Schema风格。
| 归档时间: |
|
| 查看次数: |
5487 次 |
| 最近记录: |