2012-08-10 94 views
0
#\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 

我想在一組非常...變量數據上做一個匹配,而且我不能爲我的生活決定如何匹配一個三字符串。匹配preg_match中的「---」

有問題的正則表達式是

[\-]{3} 

在我已經試過了一百組合來得到它的工作,但它不會永遠符合3個短線我。

任何想法? =/

+1

[Works for me](http://regexr.com?31q40) – 2012-08-10 13:50:54

+1

它也適用於我。發佈你的代碼,也許它與PHP相關,而不是你的正則表達式。 – Tchoupi 2012-08-10 13:52:02

+0

如果(strrpos($ mystring,「---」)> = 0){//賓果} – 2012-08-10 13:55:27

回答

0

對於三個破折號,您的正則表達式正常工作,您的更大的正則表達式的其餘部分還有其他錯誤。

證明:

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

順便說一句,如果你想匹配一個破折號和有前無其他字符的字符類,那麼你不需要逃避它。 [-]{3}將工作得很好,並且[-abc]將匹配a,b,c或破折號。

+0

你領導我會接受你的答案我對正確的答案 - 問題是\ b字邊界 – 2012-08-10 14:07:11

1

你並不需要一個字符類的單個字符,只是

-{3} 

或簡單

--- 

會做得很好。

無論如何,你的模式應該工作,檢查你是否有實際的破折號,而不是其他字符看起來像破折號(如破折號)

+0

'\ b ^([0-9] {6,8}(\ s/[0-9] {4})?|收費| --- | UNIVERSAL \ sCONNECTIVITY-DCS | FEDERAL \ sREGULATORY \ sFEE-DCS |物業\ STAX \ sALLOTMENT-DCS |行政\ sEXPENSE \ SFEE-DCS)\ B' 是我在做什麼上: '991305/0992' '991305/1000' '992034/0771' '992034/1000' ''--- ''--- 'Charges' 'Charges' 與仍無---匹配 – 2012-08-10 13:58:50

0

哦!我找到了解決方案! \ b導致它,因爲 - 不被視爲單詞字符。哎呀!