使用preg_replace无法正常工作

时间:2016-03-28 06:30:47

标签: php regex preg-replace

我需要替换不是单词,空格,逗号,句号,问号,感叹号,星号或'的字符串中的所有内容。我试图使用preg_replace来做,但没有得到正确的结果:

$string = "i don't know if i can do this,.?!*!@#$%^&()_+123|";
preg_replace("~(?![\w\s]+|[\,\.\?\!\*]+|'|)~", "", $string);

echo $string;

结果:

我不知道我是否能做到这一点,。?!! * @#$%^&()_ + 123 |

需要结果:

我不知道我是否能做到这一点,。?!*

1 个答案:

答案 0 :(得分:1)

我不知道您是否愿意先致电html_entity_decode'转换为撇号。如果你是,那么可能最简单的方法就是

// Convert HTML entities to characters
$string = html_entity_decode($string, ENT_QUOTES);
// Remove characters other than the specified list.
$string = preg_replace("~[^\w\s,.?!*']+~", "", $string);
// Convert characters back to HTML entities. This will convert the ' back to '
$string = htmlspecialchars($string, ENT_QUOTES);

如果没有,那么当& #未在;之前没有&#039时,你需要使用一些否定assertions来删除$string = preg_replace("~[^\w\s,.?!*'&#;]+|&(?!#)|&#(?!039;)|(?<!&)#|(?<!&#039);~", "", $string); 等等。

&quot;

结果略有不同。第一个代码块(提供"时)会将其转换为&,然后将其从字符串中删除。第二个块将删除;quot,并在结果中留下{{1}}。