如何在java中使用正则表达式来匹配单词

时间:2015-08-25 12:59:56

标签: java regex

我正在尝试匹配一个单词(Source Ip),其中每个字母可以是小写或大写字母,所以我写了一个正则表达式模式,但我的m.find()显示为假即使正确匹配...

我的正则表达式模式或我写的方式有错吗?

  String word = "Source Ip";
    String pattern = "[S|s][O|o][U|u][R|r][C|c][E|e]\\s*[I|i][P|p]";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(word);
    System.out.println(m.find());

4 个答案:

答案 0 :(得分:7)

您可以简单地使用

String pattern = "SOURCE\\s*IP";
Pattern r = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);

Pattern.CASE_INSENSITIVE会使匹配大小写不敏感。

答案 1 :(得分:5)

你不需要在大写和小写之间交替所有字母(注意,如其他人所提到的,字符类成语不需要|来交替 - 在方括号之间添加它也会匹配|字面意思。

您可以使用Pattern标记对Pattern.CASE_INSENSITIVE初始化进行参数化(在模式表示之前,替代内联使用将为(?i))。

例如:

Pattern.compile("(?i)source\\s*ip");

......或......

Pattern.compile("source\\s*ip", Pattern.CASE_INSENSITIVE);

注意

标记API here

答案 2 :(得分:0)

此解决方案也存在接受 sourceip 的问题。

source\s*ip

Regular expression visualization

Debuggex Demo

因此正确答案应为

source\s+ip

Regular expression visualization

Debuggex Demo

强制两个单词之间至少有一个空格。

要在Java中使用此表达式,您必须转义反斜杠并使用类似:

的内容
Pattern.compile("source\\s+ip", Pattern.CASE_INSENSITIVE);

答案 3 :(得分:-2)

如果你真的想因为某些原因而不是模式而使用正则表达式。方法然后这个正则表达式应该适合你的需要,它在我的java中工作得很好

 [s|S][o|O][U|u][r|R][c|C][e|E][ ]*[i|I][p|P]

您使用

的情况
\\s*

不会识别空格,但这将

 \s*

你有一个斜线太多了:)

编辑: 我证明了我的无知,在检查regexpal后我错了,[sS]比[s | S]好 [sS] [oO] [Uu] [rR] [cC] [eE] [] * [iI] [pP] 谢谢Pshemo 是的,我完全忘了逃避角色Mena,谢谢你为我指出了