2014-04-10 85 views
0

有人可以幫我用我的正則表達式在PHP?PHP正則表達式獲取文本之前的數字

這是我的正則表達式:

(?:\d*(\,)\d*)(\,\d*)?(\,\d*)?(\,\d*)? 

這是我的TESTDATA:

1〜2906730 RX

1-」 2733975的Rx

/132882 RX畝UUU Au

'2(* __/182 rX ... .212

我需要匹配'RX'或'rX'或'Rx'之前的數字。與上面的代碼 最後一行中的數字不匹配,因爲它錯過了','。

我相信有一個更好的方法來做到這一點。現在我的正則表達式甚至不檢查它的後面是「RX」。

任何幫助將不勝感激!可能會在php代碼中發佈 解決方案。

+1

您不需要轉義逗號。 – Barmar

+0

匹配數字和點的任意組合(最簡單的方法)可以用'[\ d。] +'完成,並且可以從字面上或用'\ s'註釋空格,最後一個文字'RX'可以與'/我'不區分大小寫的標誌。 – mario

+0

顯示預期輸出 – sectus

回答

3

我想這會做到這一點:

preg_match('/\d{1,3}(?:,\d{3}+)*(?= rx)/i', $data, $match); 

?=positive lookahead - 它需要以前的正則表達式應遵循這一羣體。並且i使正則表達式不區分大小寫,因此它將匹配RX,rx或任何組合。

DEMO

+0

如果逗號要用作千位分隔符,則更好的正則表達式將是「\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' )/我「但我承認問題的作者已經不清楚了。 –

+0

@SharanyaDutta Thx。您不需要將單引號字符串內的反斜槓加倍。 – Barmar

+0

我寫過正則表達式作爲雙引號字符串。您可以考慮使用'preg_match_all'而不是'preg_match',以便問題的作者獲取匹配值,而不僅僅是_first_之一。 –

相關問題