我想在段落中搜索整个单词,单词可能以特殊字符结尾。
例如,要搜索的文本为"search:"
,段落为"search: no search result found".
在此搜索结果中,起始索引为0,结束索引为6.
我使用的正则表达式是"\\bsarch:\\b"
但是这个正则表达式转义特殊字符':'
。
请使用Regex帮助我在java中匹配整个单词。 以下是我的java代码
String textToBeSearch="search:";
String regex = "\\b";
String completeString="search: here is the string";
String string = regex+Pattern.quote(textToBeSearch)+regex;
Pattern pattern = Pattern.compile(string);
Matcher matcher = pattern.matcher(completeString);
while(matcher.find()){
System.out.println("found");
}
System.out.println("done");
答案 0 :(得分:0)
如果要根据变量字符串创建“动态”正则表达式,则需要通过调用Pattern.quote(String s)
转义该字符串。例如,调用Pattern.quote("[test]")
将返回正则表达式:
\[test\]
或更具体地说,它将返回字符串\\[test\\]
...可以用作搜索的正则表达式。
答案 1 :(得分:0)
我认为您可以使用以下正则表达式模式:
<强>模式强>
\b(\w+?)[\:\?\!]?\b
注意:您可以在方形支架中放置尽可能多的特殊字符,因为您希望将它们包含在搜索中。
有些编译器执行不好\ b并将:
解释为新单词,因此您必须使用以下模式:
PATTERN 2
\b(\w+?)[\?\!]?\b:?
或者如果你发现它更好:
\b(\w+?)\b[:\?\!]?
JAVA CODE
String pattern ="\\b(\\w+?)[:\\?\\!]?\\b";
Pattern p = Pattern.compile(pattern,Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(inputString);
while(m.find())
{
//your code
}
注意:我这里没有针对java的IDE,所以我不是100%确定代码是 ALL 好但它应该(但模式很好)。
答案 2 :(得分:0)
基本上,您想要找到用户输入的内容并希望确保它与单词的一部分不匹配?
在这种情况下,请远离\b
及其堂兄\w
,因为对于您认为是单词的任何内容都是完全没用的(这是一些粗略的近似值,某些编程语言是标识符,而已)。最好明确说出你想要的东西:
(?<=^|\s)search:(?=\s|$)
表示搜索词之前和之后是空格或字符串的开头/结尾。您可能希望将前瞻改为
(?=[\s.,:;'"!?)]|$)
可能允许标点符号(同样,至少是后面的左括号)。