如何找到包含非单词字符的字符串?

时间:2015-03-09 17:47:48

标签: java regex

如何查找包含非单词字符的字符串?

Example input: l l'oreal s.a. l l' ab l
search String: l
output: XX l'oreal s.a. XX l' ab l
Expected: XX l'oreal s.a. XX l' ab X

我试图使用下面的正则表达式在输入字符串中找到搜索字符串。

    String inputStr = "l l'oreal s.a. l l' ab l";
    System.out.println(inputStr);
    String searchStr = "l";

    Pattern pattern = Pattern.compile("(\\b"+ searchStr +"\\b)(?=[\\s])");
    Matcher matcher = pattern.matcher(inputStr);

    if ( matcher.find()){
        String rep = matcher.replaceAll("XX");
        System.out.println("REP:" + rep);
    }else{
        System.out.println("no match...");
    }

正则表达式模式搜索其后跟空格(\ s)的字符串。但是在上面的例子中,它不适用于最后一个字符,因为它后面没有空格。

主要目标是找到非字符字符串,如... private-limited(搜索私有时应该返回false) 你好! (搜索Hello时为false) 尝试但没有工作的几种模式...

pattern = Pattern.compile("(?<![\\w+])" + searchStr + "(?![\\W+])", Pattern.CASE_INSENSITIVE);
pattern = Pattern.compile("(?<=[\\s])(\\b"+ searchStr +"\\b)(?=\\s)");

在上面的示例中,如果我替换searchString =&#34; l&#39;&#34;它没有任何匹配。

我的方法是否正确? 我错过了什么?

感谢。

2 个答案:

答案 0 :(得分:1)

好像你真的不需要字边界。您需要匹配,由空格或字符串结尾包围。为此,您可以使用:

Pattern pattern = Pattern.compile("((?<=\\s|^)"+ searchStr +"(?=\\s|$))");

答案 1 :(得分:0)

将前瞻改为:

(?=\\s|$)

这将确保输入的空格或结尾符合oyur匹配。