2009-10-04 78 views
0

我真的很困惑,因爲使用preg_replace但是慢慢學習。preg_replace正則表達式查找字母前面的數字

我需要的功能幫助:

$str= preg_replace('#\W\d+#', '\W \d+', $str); 

的想法是,林尋找那個面前有直接的字母,不帶空格的數字,

ABC123。 (不是「ABC 123」,而不是「123ABC」)

,我如何簡單地包括在之間的空間或性格讓ABC123成爲ABC 123或ABC @@ 123

感謝大家!

+0

看看這裏:http://txt2re.com/它可能會幫助 – SeanJA 2009-10-04 23:32:35

+0

謝謝,但我一直編碼太多今晚,看着這讓我的頭受傷! – bluedaniel 2009-10-04 23:44:03

回答

2
<?php 

$str = 'abc()1234'; 
$str= preg_replace('#([a-zA-Z()])(\d+)#', '$1 $2', $str); 

echo $str; 

輸出:

ABC()1234

$ 1和$ 2的反向引用和分別是指第一和第二捕獲基團,。更多信息@http://www.regular-expressions.info/brackets.html

+0

我在示例中使用了preg_match,因此您可以真正瞭解數組是如何填充的以及可以用於preg_replace的。按照混沌的例子,$ 1和$ 2會引用第一個和第二個捕獲的碎片。 – 2009-10-04 23:43:08

+0

感謝您的幫助,您是否可以幫助我的最新評論:'非常好,有用。但對我而言,我可能實際上需要在數字之前檢查括號,那麼模式也可以使用abc()123? – bluedaniel 2009-10-04 23:45:50

+0

我更新了它,所以它佔(和)。 – 2009-10-04 23:47:11

3

你想

$str= preg_replace('#([A-Za-z]+)(\d+)#', '$1 $2', $str); 

\W不會做你認爲它; \w表示「單詞字符」,而\W表示「而非單詞字符」。既然你特意要字母,但是,你也不想要,你需要[A-Za-z],這是與所有字母匹配的字符類。之後你還需要一個+以匹配「一個或多個」。

括號是如何「捕獲」表達式的一部分供以後參考; $1$2指向括號捕獲的文本。

+0

非常好,作品一種享受。但對我來說,我可能實際上需要在數字之前檢查括號,那麼模式也可以使用abc()123? – bluedaniel 2009-10-04 23:43:13

+0

製作[A-Za-z] [A-Za-z()]並在其中包含任何其他字符,但是如果您這樣做,則可能需要轉義[和]。 – 2009-10-04 23:44:30

+0

感謝那個工作得很好的人。不能告訴你你的幫助 – bluedaniel 2009-10-04 23:52:05

0

您可以在online PHP Regegular expressor tester中看到/([A-Za-z])(\d+)//([A-Za-z]+)(\d+)/之間的差異。在你的情況下,兩者都與preg_replace一起工作。但後者也適用於preg_match_all,所以它更加健壯。

相關問題