??????????????语境:我将字符串值传递给setter方法。它需要验证字符串。通过验证我的意思是它需要检查非单词字符和数字(\ w&& [0-9])。离我最近的……????????
????如果你想检查一个字符串是否包含使用正则表达式的子字符串,你可以做的最接近的是使用find() - ??
private static final validPattern = "\\bstores\\b.*\\bstore\\b.*\\bproduct\\b" Pattern pattern = Pattern.compile(validPattern); Matcher matcher = pattern.matcher(inputString); System.out.print(matcher.find()); // should print true or false.
????注意match()和find()之间的区别,匹配()如果整个字符串与给定模式匹配则返回true。 find()尝试查找与给定输入字符串中的模式匹配的子字符串。另外,通过使用find(),您不必在开头添加额外的匹配,例如 - (?s)。*,在正则表达式模式的末尾添加。*。 ??
????? String.contains ?????使用String,句点。它不适用于正则表达式。它将检查指定的确切String是否出现在当前String中。 ??
String.contains
????注意 ????? String.contains ?????不检查单词边界;它只是检查子串。 ??
????正则表达式比 ????? String.contains ????,因为你可以对关键字(除其他外)强制执行单词边界。这意味着您可以搜索关键字 ???? ??????话 ???? ????而不仅仅是 ???? ??????子 ???? ????。 ??
????使用 ????? String.matches ?????使用以下正则表达式: ??
String.matches
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
????RAW正则表达式(删除字符串文字中的转义 - 这是你打印出上面的字符串时得到的): ??
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
????该 ????? \b ?????检查单词边界,以便您不匹配 ????? restores store products ????。注意 ????? stores 3store_product ?????也被拒绝,因为数字和 ????? _ ?????被认为是一个单词的一部分,但我怀疑这个案例出现在自然文本中。 ??
\b
restores store products
stores 3store_product
_
????由于双边都检查了单词边界,因此上面的正则表达式将搜索确切的单词。换一种说法, ????? stores stores product ?????与上面的正则表达式不匹配,因为您正在搜索单词 ????? store ?????无 ????? s ????。 ??
stores stores product
store
s
????? . ?????通常匹配任何角色 ????的 ??????除了 ????强> ???? ??????一些新的线条字符 ???? ????。 ????? (?s) ?????在开始时 ????? . ?????毫无例外地匹配任何角色(感谢Tim Pietzcker指出这一点)。 ??
.
(?s)
????你可以简单地使用 ????? matches ?????String类的方法。 ??
matches
boolean result = someString.matches("stores.*store.*product.*");
public static void main(String[] args) { String test = "something hear - to - find some to or tows"; System.out.println("1.result: " + contains("- to -( \\w+) som", test, null)); System.out.println("2.result: " + contains("- to -( \\w+) som", test, 5)); } static boolean contains(String pattern, String text, Integer fromIndex){ if(fromIndex != null && fromIndex < text.length()) return Pattern.compile(pattern).matcher(text).find(); return Pattern.compile(pattern).matcher(text).find(); }
????结果:是的 ??
????? matcher.find() ?????做你需要的。例: ??
matcher.find()
Pattern.compile("stores.*store.*product").matcher(someString).find();