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

标签 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(搜索 private 时应返回 false) 你好! (搜索 Hello 时为 false) 尝试过但不起作用的几种模式...

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

在上面的示例中,如果我替换 searchString = "l'",它不会匹配任何内容。

我的方法正确吗? 我缺少什么?

谢谢。

最佳答案

似乎您并不真正需要单词边界。您需要由空格或字符串末尾包围的匹配项。为此,您可以使用:

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

关于java - 如何查找包含非单词字符的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28949614/

相关文章:

java - 四色定理的递归算法

java - 如何抑制特定函数的 Java 编译器警告

java - 使用正则表达式和java从聊天日志中获取一组数据

javascript - 限制正则​​表达式中的字符长度

java - 字符串与正则表达式不匹配

c# - 正则表达式 - 最长的可能值

java - 从HBase读取数据

java - Java 如何解析不在方法声明中的泛型类型参数?

java - 正则表达式匹配 10-15 位数字

java - "Cannot resolve symbol ItemClickListener"