在preg_match中匹配“---”

时间:2012-08-10 13:47:57

标签: php regex preg-match-all

#\b^([0-9]{7,8}(\s/[0-9]{4})?|Charges|[\-]{3}|UNIVERSAL\sCONNECTIVITY-DCS|FEDERAL\sREGULATORY\sFEE-DCS|PROPERTY\sTAX\sALLOTMENT-DCS|ADMINISTRATIVE\sEXPENSE\sFEE-DCS)\b#m

我试图在一组非常可变的数据上进行匹配,我不能在我的生活中确定如何匹配三个短划线的字符串。

有问题的正则表达式是

[\-]{3}

我已经尝试了一百种组合让它发挥作用,但它并没有为我提供3个破折号。

有什么想法吗? = /

3 个答案:

答案 0 :(得分:1)

您不需要单个字符的字符类,只需

-{3}

或更简单的

---

会好起来的。

你的模式无论如何都应该有效,检查你是否有实际破折号,而不是其他字符看起来像像破折号(如em破折号)。

答案 1 :(得分:0)

你的三个破折号的RegEx工作正常,你的更大的RegEx的其余部分还有其他东西失败了。

证明:

$x = 'mi---hai';
echo preg_replace('/[\-]{3}/', '', $x); // echoes 'mihai'

顺便说一句,如果你想要匹配破折号并且在角色类中没有其他字符,那么你不需要逃避它。 [-]{3}可以正常工作,[-abc]将匹配a,b,c或破折号。

答案 2 :(得分:0)

噢!我找到了解决方案! \ b导致它,因为 - 不被视为单词字符。糟糕!