簡體   English   中英

正則表達式刪除所有標點符號,除了'

[英]Regex to strip all punctuation except '

我想從我導入的文本塊中刪除所有標點符號,除了',例如'in not not。

我現在有

$ 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);

看看這里

您可以使用

(?!')\p{P}

匹配除撇號之外的任何標點符號。 例如

preg_replace('/(?!\')\p{P}/gu', '', $str);
/(?!'\b)[[:punct:]] ?/

這匹配任何標點符號,除非它是一個撇號后跟一個字符(即一個字邊界,暗示一個字符)。

http://rubular.com/r/VJ0J5c25vc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM