正则表达式删除所有标点符号,除了'

时间:2013-03-11 07:58:53

标签: php regex

我想从我导入的文本块中删除所有标点符号,除了',例如'in not not。

我目前有

  

$ words = preg_replace('/ [^ a-z] + / i','',$ words);

删除所有标点符号,但我不确定如何包含'。

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:2)

试试吧

preg_replace( '/[^\w\']+|\'(?!\w)|(?<!\w)\'/', '', $words )

这应该替换所有非字母以及单词之外的单个撇号

尚未经过测试,如果有效,请告诉我

更新

也可以删除数字,只需使用此正则表达式

/[^\w\']+|\'(?!\w)|(?<!\w)\'|\d+/

刚刚添加\d+,因此数字匹配并将被删除

答案 1 :(得分:1)

要使用unicode属性删除标点字符,请执行以下操作:

 preg_replace('/\p{Punctuation}+/u', '', $words);

 preg_replace('/\p{P}+/u', '', $words);

删除除单引号之外的所有标点符号:

 preg_replace("/[^\P{P}']+/u", '', $words);

查看here

答案 2 :(得分:1)

您可以使用

(?!')\p{P}

匹配除撇号之外的任何标点符号。 E.g。

preg_replace('/(?!\')\p{P}/gu', '', $str);

答案 3 :(得分:0)

/(?!'\b)[[:punct:]] ?/

这匹配任何标点符号,除非它是一个撇号后跟一个字符(即一个字边界,暗示一个字符)。

请参阅http://rubular.com/r/VJ0J5c25vc