我需要更换所有不是字母,单引号,逗号,句号,问号或感叹号的内容。但我的正则表达式似乎没有正常工作。我究竟做错了什么?
$userResponse = "i'm so happy that you're here with me! :)";
$userResponse = preg_replace("~(?!['\,\.\?\!a-zA-Z]+)~", "", $userResponse);
echo $userResponse;
结果:
i'm so happy that you're here with me! :)
需要结果:
i'm so happy that you're here with me!
答案 0 :(得分:2)
试试这个:
[^a-zA-Z',.?! ]+
答案 1 :(得分:1)
让我们看看你在(?!['\,\.\?\!a-zA-Z]+)
做了什么。
你的正则表达式意味着什么 如果课程中提到的多个字符(如果存在)则在它之后匹配零宽度时向前看。
因为您正在使用negative look ahead
,所以正则表达式会查找允许的字符并匹配零宽度。
Dotted lines in test string is zero width.
尝试使用以下正则表达式。
正则表达式: [^a-zA-Z',.?!\s]
说明:此正则表达式与任何匹配,但课程中提到的字符除外,并由empty string
替换。
Php代码:
<?php
$userResponse = "i'm so happy that you're here with me! :)";
$userResponse = preg_replace("~[^a-zA-Z',.?!\s]~", "", $userResponse);
echo $userResponse;
?>
<强> Regex101 Demo 强>
<强> Ideone Demo 强>