2

私はテキストの大きな塊を持っています、そのテキストの中にこのようなテキストのいくつかの出現があります201014120 - 10。通常のハイフン(-)を含むテキストもあります。

私がやろうとしているのは、2つの数字の間のハイフンをコンマに置き換えます,が、テキスト内の他のハイフンは置き換えないことですPHPでこれを実行したいと思いpreg_replaceます。

番号は同じではなく、各番号の長さはすべてのテキストで同じではありません。

コードとこの非常に優れたWebサイトの両方で、さまざまなタイプの正規表現を試しました。

4

4 に答える 4

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
于 2013-01-16T11:20:31.990 に答える
1

ルックアラウンドを使用して、数字で囲まれたハイフンのみに一致することを確認できます。

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

(?<=\d)正の後読みです: 数字が前にある場合にのみ、正規表現の一致を許可します。逆に、(?=\d)正先読みです。正規表現は、ハイフンを囲むすべての空白に一致します (したがって置換します)。

于 2013-01-16T11:21:39.570 に答える
0

未テスト:

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

または、テキストが「数字」「空白」「ハイフン」「空白」「数字」のとおりである場合

preg_replace("/(\d+\w*)-(\w*\d+)/g","$1,$2",$text);
于 2013-01-16T11:20:34.000 に答える
0
<?php
$string = '201014120 - 10';
$pattern = '/(\d+) - (\d+)/';
$replacement = '$1,$2';
echo preg_replace($pattern, $replacement, $string);
?>
于 2013-01-16T11:21:30.843 に答える