正则表达式匹配并不像我预期的那样

时间:2015-07-06 16:55:33

标签: java regex

在下面给出的匹配中: 为什么第一场比赛是给出那个输出...... 并在第二场比赛中为什么' - '与目标不匹配

_validateCouponCode in Mage_Sales_Model_Quote

编辑: -

感谢您询问代码

  

请在此处找到代码:http://paste.ubuntu.com/11831819/

1 个答案:

答案 0 :(得分:4)

第一个匹配行/字符串^[a-z]开头的任何字符和行/字符串\?$末尾的问号,这是因为

  • ^ 表示开始
  • $ 表示行尾

在第二个中, [] 表示匹配集合中的字符,而 - 表示“之间”,因此匹配其ascii值为的字符在 \ (具有ascii值92)和 ^ (具有ascii值94)或 $。* +()| 之一之间。由于 - 的ascii值为46,因此不会显示。

要解决您的问题,您应引用-

[\\\-^$.?*+()|]

或将其放在最后

[\\^$.?*+()|-]

。当然这是bash但是:

echo 'begin []\^$.?*+()|- end' | sed -e 's/[][\\^$.?*+()|-]/x/g'
begin xxxxxxxxxxxxx end

所有特殊字符都被x替换,而我只引用\,因为所有其他字符都放在右边。如果我移动-[]我也必须引用它们。