我有一个要求,我需要使用String.matches进行一些修改以代替Pattern.compile()。matcher()。find()。
这是用于Java代码的,它将在GWT项目中使用,但不能在客户端使用。
GWT不接受util.regex
作为JRE评估,因此必须使用String.matches()
以下是使用Pattern
的当前代码。这里的要求是数字必须以1
或2
或44
开头。
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}
进行比较。
可以使用匹配项来破坏字符串吗?
答案 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]
:1
或2
44
文字字符串"44"
.*
后面的所有内容