我必须搜索并替换句子中所有以 @ 和 # 开头的单词。您能否让我知道在 PHP 中执行此操作的最佳方法。我试过了
preg_replace('/(\@+|\#+).*?(?=\s)/','--', $string);
这将只解决一个句子中的一个单词。我希望所有的比赛都被替换。
我不能g
像在 perl 中一样。
我必须搜索并替换句子中所有以 @ 和 # 开头的单词。您能否让我知道在 PHP 中执行此操作的最佳方法。我试过了
preg_replace('/(\@+|\#+).*?(?=\s)/','--', $string);
这将只解决一个句子中的一个单词。我希望所有的比赛都被替换。
我不能g
像在 perl 中一样。
preg_replace
默认替换所有匹配项。如果不这样做,则说明您的模式或数据存在问题。
试试这个模式:
(?<!\S)[@#]+\w+
(?<!\S)
- 如果模式前面有非空白字符,则不匹配。
[@#]+
- 匹配一个或多个@
and #
。
\w+
- 匹配一个或多个单词字符(字母、数字、下划线)。这将保留标点符号。例如,@foo.
将替换为--.
. 如果你不想要这个,你可以改用\S+
它,它匹配所有不是空格的字符。
尝试这个 :
$string = "@Test let us meet_me@noon see #Prasanth";
$new_pro_name = preg_replace('/(?<!\S)(@\w+|#\w+)/','--', $string);
echo $new_pro_name;
@
这将替换所有以OR开头的单词#
输出:-- let us meet_me@noon see --
如果要在@
OR之后替换单词,#
即使它位于单词的中间。
$string = "@Test let us meet_me@noon see #Prasanth";
$new_pro_name = preg_replace('/(@\w+|#\w+)/','--', $string);
echo $new_pro_name;
输出:-- let us meet_me-- see --
以字符开头的单词意味着它在该字符之前有一个空格。尝试这样的事情:
/(?<!\S)[@#].*(?=[^a-z])/
为什么不使用(?=\s)
?因为如果单词后面有一些标点符号,它就不是单词的一部分。注意:您可以用[^a-z]
单词中任何不允许的字符列表替换。
但要小心,有两种特殊情况不起作用。您必须preg_replace
连续使用 3 个,另外两个用于字符串开头和结尾的单词:
/^[@#].*(?=[^a-z])/
/(?<!\S)[@#].*$/