我想从我导入的文本块中删除所有标点符号,除了',例如'in not not。
我目前有
$ words = preg_replace('/ [^ a-z] + / i','',$ words);
删除所有标点符号,但我不确定如何包含'。
我怎样才能做到这一点?
答案 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)