我不重复系列中的单位(例如,4,6.5,8和12厘米),除了每个数字后重复% 该系列可以是任何长度,因此我希望正则表达式是全局的。 我附上了我的示例程序。
<?php
$match = '4 CM,6.5 CM';
$replacement='$1$2$3';
$replac = preg_replace('/(,?\d+\s?\W?)\w+?(,?\d+\s?\W?)(\w+)?/',
$replacement,
$match);
echo $replac;
?>
输入:
4 CM,6.5 CM
输出:
4 ,6.5 CM
预期结果:
输入:
4 cm,6.5 cm,8 cm,9 cm and 10 cm //the series can be of any length
输出:
4,6.5,8,9 and 10 cm //units at the end
帮助我将我的正则表达式作为一个全局的。所以它可以检查任意数量的系列。 感谢。
答案 0 :(得分:2)
我认为你是在思考这个问题。只需从字符串中删除所有cm
,但最后一个除外。
$str = '4 cm,6.5 cm,8 cm,9 cm and 10 cm';
$out = preg_replace('/ cm(?!$)/i', '', $str);
输出:4,6.5,8,9 and 10 cm
正则表达式解释说:
/ cm(?!$)/i
\ /\ / ^
| \ / |
| | `-- Case insensitive
| `------ Negative lookahead, do not match if end of string
`---------- Match " cm" literally
对于更通用的方法(捕获任何单位):
/ [^,]+(?=,| and )/i
\ /\ /\ / ^
\ / | \ / |
\/ | \ / `-- Case insensitive
| | `-------- Literal "," or " and "
| `------------- Positive lookahead, require following pattern
`------------------ Capture until first comma (+ means 1 or more)
答案 1 :(得分:1)
$a = '4 cm,6.5 cm,8 cm,9 cm and 10 cm';
$exploded = explode(' and ', $a);
$爆炸[0]是“4厘米,6.5厘米,8厘米,9厘米”
$爆炸[1]是“10厘米”
现在让我们删除“cm”
$beforeAnd = preg_replace('/ cm/', '', $exploded[0]);
$ beforeAnd是“4,6.5,8,9”
$afterAnd = $exploded[1];
$ afterAnd是“10 cm”
$result = $beforeAnd . ' and ' . $afterAnd;
“4cm,6.5cm,8cm,9cm”+“和”+“10cm”