从字符串中间替换字符

时间:2011-01-05 23:56:23

标签: php preg-replace replace

我是preg_replace的新手 - PHP,现在就学习它...... 我想更改一个特定的字符,只要它的前一个和后一个字符是英文字符。即目标字符是单词的一部分,而不是开始或结束字符。

例如......

$string = "I am learn*ing *PHP today*";

我希望将此字符串转换为以下内容。

$newString = "I am learn'ing *PHP today*";

4 个答案:

答案 0 :(得分:3)

$string = "I am learn*ing *PHP today*";
$newString = preg_replace('/(\w)\*(\w)/', '$1\'$2', $string);

// $newString = "I am learn'ing *PHP today* "

这将匹配由单词字符(字母,数字,下划线)包围的星号。如果你只想做字母字符,你可以这样做:

preg_replace('/([a-zA-Z])\*([a-zA-Z])/', '$1\'$2', 'I am learn*ing *PHP today*');

答案 1 :(得分:0)

最简洁的方法是在您的模式中使用“单词边界”字符——它们代表“单词”字符和“非单词”字符之间的零宽度位置。由于 * 是非单词字符,因此单词边界要求相邻的两个字符都是单词字符。

没有捕获组,没有引用。

代码:(Demo)

$string = "I am learn*ing *PHP today*";
echo preg_replace('~\b\*\b~', "'", $string);

输出:

I am learn'ing *PHP today*

答案 2 :(得分:-1)

要仅替换字母字符,您需要使用[a-z]作为字符范围,并使用i标志使正则表达式不区分大小写。由于您要替换的字符是星号,因此您还需要使用反斜杠对其进行转义,因为星号表示正则表达式中“匹配零次或多次”。

$newstring = preg_replace('/([a-z])\*([a-z])/i', "$1'$2", $string);

答案 3 :(得分:-1)

替换所有被字母包围的星号....

$ string = preg_replace('/(\ w)*(\ w)/','$ 1 \'$ 2',$ string);

替换所有出现星号的星号,其中星号是开始和结束的字符.......

$ string = preg_replace('/ *(\ w +)* /','\'$ 1 \'',$ string);