使用String.macthes()代替util Pattern匹配前两位

时间:2018-08-10 08:41:46

标签: java regex string pattern-matching

我有一个要求,我需要使用String.matches进行一些修改以代替Pattern.compile()。matcher()。find()。 这是用于Java代码的,它将在GWT项目中使用,但不能在客户端使用。 GWT不接受util.regex作为JRE评估,因此必须使用String.matches()

以下是使用Pattern的当前代码。这里的要求是数字必须以1244开头。

String s = "1071922746"
Pattern p = Pattern.compile("^[12]|^[4]{2}");
Matcher m = p.matcher(s);
System.out.println(m.find());  // this will print true.

我正在尝试使用以下新代码。

String sNew= s.substring(0,2);
System.out.println(sNew.matches("^[12]|^[4]{2}"); // this will print false.

但是使用String.matches的新代码实际上将整个字符串与Regex [12][4]{2}进行比较。 可以使用匹配项来破坏字符串吗?

2 个答案:

答案 0 :(得分:2)

首先,您是否知道您有未使用的变量sNew?现在到了重点:

  • Pattern.compile().matcher().find()-方法Matcher::find尝试查找与模式匹配的输入序列的下一个 *子序列
  • s.matches("^[12]|^[4]{2}")-方法String::matches告诉此字符串是否与给定的正则表达式匹配。

简短地说,第一个代码片段测试是否存在子字符串,而第二个代码片段则测试整个字符串。因此,您必须匹配其余的字符串(Regex101):

^([12]|44).*

答案 1 :(得分:2)

请注意,在Java中(与许多其他语言不同),整个字符串必须与matches()的正则表达式匹配才能返回true

尝试一下:

s.matches("^([12]|44).*");

破坏正则表达式:

  • ^:开始输入
  • (...|...)替代-就像两个正则表达式的OR
  • [12]12
  • 44文字字符串"44"
  • .*后面的所有内容