用于查找特殊字符后面或前面的单词位置的正则表达式

时间:2015-03-11 02:45:38

标签: java regex string pattern-matching

我想在长字符串中找到单词的位置。该单词可以在特殊字符之前或之后,但不能是字母数字字符。所以,如果我搜索德国和字符串包含德国!或者$ germany或$ germany)(或德国我想要它的位置。我怎么能为此写一个正则表达式。我试过这个(?i)(?< = ^ | [^ az])德国(?= $ | [^ az])但它没有用。

String s="(?i)(?<=^|[^a-z])germany(?=$|[^a-z])";
Pattern p= Pattern.compile("(?i)(?<=^|[^a-z])cat(?=$|[^a-z])");
Matcher m=p.matcher(" germany@ is germany");
System.out.println(m.matches());

每次都返回一个假。你能建议一个正确的方法吗?我想找到这样的词并替换它们。

2 个答案:

答案 0 :(得分:2)

虽然上面的答案是正确的,但使用这个正则表达式可以提高效率

        Pattern p = Pattern.compile("(?<![^\\W_])" + string + "(?![^\\W_])");

你的工作应该花更少的时间用这个

答案 1 :(得分:1)

  1. 您需要使用matcherobject.find()方法来查找匹配的子字符串。 matches方法将尝试针对整个输入字符串检查正则表达式。

  2. Pattern p= Pattern.compile("(?i)(?<=^|[^A-Z0-9a-z])germany(?=$|[^A-Z0-9a-z])");

  3. 如果不是字母数字,则需要在否定字符类中使用A-Z0-9

    ArrayList<Integer> positions = new ArrayList();
    String s = "germany@ is germany";
    Pattern p= Pattern.compile("(?i)(?<=^|[^a-zA-Z\\d])(g)ermany(?=$|[^a-zA-Z\\d])");
    Matcher m=p.matcher(s);
    while(m.find())
    {
    positions.add(m.start());
    }
    System.out.println(positions);
    

    <强>输出:

    [0, 12]