使用正则表达式替换字符串中的最后一个逗号

9
我有一个字符串:
"item 1, item 2, item 3"
我需要把它转换成:
"item 1, item 2和item 3"
实际上,只需用“and”替换最后一个逗号。有人能帮我吗?
3个回答

13
你可以使用这个正则表达式:,([^,]*)$,它匹配最后一个逗号和逗号后的文本。
$re = '/,([^,]*)$/m';
$str = 'item 1, item 2, item 3';
$subst = " and $1";

$result = preg_replace($re, $subst, $str);

8
使用贪婪算法来实现这个目标:
$text = preg_replace('/(.*),/','$1 and',$text)

这个匹配到最后一个逗号并将其替换为没有逗号的内容。


你能解释一下 $1 的作用吗?我在等你的答复。 - K6t
1
在正则表达式中,你可以使用所谓的反向引用来保存匹配字符串的部分内容。你只需要在表达式的某个部分加上大括号即可定义一个反向引用。你可以通过 $1 至 $9 或者 \1 至 \9 来引用这些反向引用。因此,在本例中,$1 就是第一个反向引用(即 (.*))的值。 - ckruse

0
不需要捕获组。只需贪婪地匹配字符串中的所有字符,然后在匹配字符串中的最后一个逗号之前,使用\K来“忘记”所有先前匹配的字符。这有效地仅匹配最后出现的逗号。用空格和单词“and”替换该逗号。
代码:(演示)
echo preg_replace('/.*\K,/', ' and', 'item 1, item 2, item 3');
// item 1, item 2 and item 3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接