2013-01-16 21 views
2

我有一大塊文字的兩個整數之間,該文本有這樣201014120 - 10文字的幾次出現。還有帶正常連字符( - )的文字。查找和替換一個連字符( - )可變長度

我想要做的,是用逗號,替換文本中的任何其他連字符來代替兩個數字之間的連字符。我想用PHP的preg_replace做到這一點。

的數字是不一樣的,並且每個號碼的長度不會爲所有文字相同。

我已經嘗試不同類型的正則表達式,既與代碼以及與此非常好的website

+0

給你的字符串的樣品 – Afsar

回答

1

您可以使用lookaround,以確保您只匹配連字符包圍數字:

preg_replace('/(?<=\d)\s*-\s*(?=\d)/', ', ', $input); 

(?<=\d)爲正回顧後:它僅允許在它是由一個數字前面的正則表達式匹配。相反,(?=\d)是積極的前瞻。正則表達式將匹配(並因此替換)連字符周圍的任何空格。

+0

非常感謝!這就是訣竅! – Rune

1

嘗試:

$str='e-mail 201014120 - 10 e - mail 201014120-10';  
echo preg_replace('/(\d+\s*)-(\s*\d+)/','${1},${2}',$str); 

>>> e-mail 201014120 , 10 e - mail 201014120,10 

比賽(\d+\s*)-(\d+\s*)

\d+ # One or more digits 
\s* # Zero or more white space characters 
- # Literal hypen 
() # Capture group 

更換${1},${2}

${1} # The first captured group 
, # A literal comma 
${2} # The second captured group 
0

未經測試:

preg_replace("/(\d+)-(\d+)/g","$1,$2",$text); 

,或者,如果您的文字是指出,「數字」,「空格」「字號」,「空白」,「數字」

preg_replace("/(\d+\w*)-(\w*\d+)/g","$1,$2",$text); 
0
<?php 
$string = '201014120 - 10'; 
$pattern = '/(\d+) - (\d+)/'; 
$replacement = '$1,$2'; 
echo preg_replace($pattern, $replacement, $string); 
?> 
相關問題