1

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

我目前有

$words = preg_replace('/[^az]+/i', '', $words);

哪个去掉了所有标点符号,但我不确定如何包含 '.

我怎样才能做到这一点?

4

4 回答 4

1

要删除具有 unicode 属性的标点符号,请执行以下操作:

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

或者

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

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

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

看看这里

于 2013-03-11T08:25:35.723 回答
1

试试看

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

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

尚未测试,请让我知道它是否有效

更新

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

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

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

于 2013-03-11T08:06:02.133 回答
0

您可以使用

(?!')\p{P}

匹配除撇号以外的任何标点符号。例如

preg_replace('/(?!\')\p{P}/gu', '', $str);
于 2013-03-11T08:25:49.003 回答
0
/(?!'\b)[[:punct:]] ?/

这匹配任何标点字符,除非它是一个撇号后跟一个字符(即单词边界,这意味着一个字符)。

http://rubular.com/r/VJ0J5c25vc

于 2013-03-11T08:31:13.843 回答