Java - 在正则表达式中逃脱的明星

时间:2015-01-25 20:00:03

标签: java regex

我想将一行与正则表达式匹配。该行包含两个数字,可以除以加号,减号或星号(乘法)。但是,我不知道如何逃脱这位明星。

line.matches("[0-9]*[+-*][0-9]*");

我也试过line.matches("[0-9]*[+-\\*][0-9]*");,但它也不起作用。

我应该将明星分成不同的组吗?为什么转义\\*在这种情况下不起作用?

1 个答案:

答案 0 :(得分:4)

*不是character class[...])中的元字符,因此您根本不需要逃避它。你需要逃脱的是-,因为在内部角色类中它负责创建像[a-z]这样的字符的范围

所以代替"[+-*]"代表+*之间的Unicode表格中的所有字符使用

  • "[+\\-*]"
  • 或将-放在不能用作范围指示符的位置
    • 在字符类[-+*]
    • 的开头
    • 在角色等级[+*-]
    • 的末尾
    • 或者在其他范围之后,如果你有一个`[a-z - + *]

顺便说一句,如果您想将\字面值添加到运算符中,则需要将其作为\\在regex中编写(它是用于转义或访问标准字符类的元字符,如{{1}所以我们也需要逃避它)。但由于\w在字符串文字中也很特殊(它可用于通过\ \n \r\t表示字符),因此您还需要转义它也在那里。因此,在正则表达式中,\uXXXX需要表示为\,其字符串文字写为\\

BTW 2:您可以简单地使用"\\\\"(写作[0-9])而不是撰写\d

BTW 3:如果你想确保字符串中至少有两个数字(运算符每边一个),你需要在{{1}使用"\\d"代替+*表示 一个 或更多出现之前的元素,而[0-9]*表示 或多次出现

所以你的代码看起来像

+