インポートするテキストのブロックからすべての句読点を削除したいのですが、'in'などの'は削除しません。
私は現在持っています
$ words = preg_replace('/ [^ az] + / i'、''、$ words);
これはすべての句読点を取り除きますが、'を含める方法がわかりません。
どうすればこれを達成できますか?
そうやってみる
preg_replace( '/[^\w\']+|\'(?!\w)|(?<!\w)\'/', '', $words )
これは、単語以外のすべての非文字と単一のアポストロフィを置き換える必要があります
まだテストしていませんが、動作するかどうか教えてください
アップデート
数字も削除するには、この正規表現を使用してください
/[^\w\']+|\'(?!\w)|(?<!\w)\'|\d+/
追加されたばかり\d+
なので、数字が一致して削除されます
Unicode プロパティで句読点を削除するには、次のようにします。
preg_replace('/\p{Punctuation}+/u', '', $words);
また
preg_replace('/\p{P}+/u', '', $words);
一重引用符を除くすべての句読点を削除するには:
preg_replace("/[^\P{P}']+/u", '', $words);
こちらをご覧ください。
/(?!'\b)[[:punct:]] ?/
これは、アポストロフィの後に文字が続く場合 (つまり、文字を意味する単語境界) でない限り、任意の句読点文字に一致します。
http://rubular.com/r/VJ0J5c25vcを参照してください。
使用できます
(?!')\p{P}
アポストロフィ以外の句読点に一致します。例えば
preg_replace('/(?!\')\p{P}/gu', '', $str);