我是preg_replace
的新手 - PHP,现在就学习它......
我想更改一个特定的字符,只要它的前一个和后一个字符是英文字符。即目标字符是单词的一部分,而不是开始或结束字符。
例如......
$string = "I am learn*ing *PHP today*";
我希望将此字符串转换为以下内容。
$newString = "I am learn'ing *PHP today*";
答案 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);