我想检查一个字符串是否包含两个单词/字符串以特定的顺序直接跟随。标点符号也应该包含在单词/字符串中。(即"word"和"word")。应该作为不同的词处理。
例如:
String word1 = "is";
String word1 = "a";
String text = "This is a sample";
Pattern p = Pattern.compile(someregex+"+word1+"someregex"+word2+"someregex");
System.out.println(p.matcher(text).matches());
这应该打印出true
使用以下变量,它也应该输出true。
String word1 = "sample.";
String word1 = "0END";
String text = "This is a sample. 0END0";
但是当设置word1 = "sample"(不带标点符号)时,后者应该返回false。
有没有人知道regex字符串应该是什么样的(即我应该写什么而不是"someregex"?)
谢谢!
看起来你只是在空格上分割,试试:
Pattern p = Pattern.compile("(\s|^)" + Pattern.quote(word1) + "\s+" + Pattern.quote(word2) + "(\s|$)");
解释
(\s|^)
匹配第一个单词之前的任何空白,或者字符串
\s+
匹配单词
(\s|$)
匹配第二个单词之后的任何空白,或者字符串
Pattern.quote(...)
确保输入字符串中的任何regex特殊字符都是正确的转义。
您还需要调用find()
,而不是match()
。match()
只会在整个字符串匹配模式时返回true。
完整的示例
String word1 = "is";
String word2 = "a";
String text = "This is a sample";
String regex =
"(\s|^)" +
Pattern.quote(word1) +
"\s+" +
Pattern.quote(word2) +
"(\s|$)";
Pattern p = Pattern.compile(regex);
System.out.println(p.matcher(text).find());
您可以用空格连接两个单词并将其用作regexp。你唯一要做的就是用"。"替换"。",这样这个点就不会匹配成任何字符了。
String regexp = " " + word1 + " " + word2 + " ";
regexp = regexp.replaceAll("\.", "\\.");