替换不是字母,单引号,逗号,句号,问号或感叹号的所有内容

时间:2016-04-01 00:15:43

标签: php regex preg-replace

我需要更换所有不是字母,单引号,逗号,句号,问号或感叹号的内容。但我的正则表达式似乎没有正常工作。我究竟做错了什么?

$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!

2 个答案:

答案 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