[英]preg_replace in PHP - regular expression for NOT condition
我正在嘗試使用preg_replace在PHP中編寫一個函數,它將替換列表中找不到的所有字符。 通常我們會替換它們的位置,但這個不同。
例如,如果我有字符串:
$mystring = "ab2c4d";
我可以編寫以下函數,用*替換所有數字:
preg_replace("/(\d+)/","*",$mystring);
但我想從a到z替換那些既不是數字也不是字母的字符。 它們可能是#$ *();〜!{} [] | \\ /。,<>? 等等
所以除了數字和字母之外的任何東西都應該被別的東西取代。 我怎么做?
謝謝
你想使用一個否定的“字符類” 。 它們的語法是[^...]
。 在你的情況下,我認為只是[^\\w]
。
嘗試
preg_replace("/([^a-zA-Z0-9]+)/","*",$mystring);
\\W
匹配非alpha,非數字字符。 下划線_
包含在字母數字列表中,所以它在這里也不匹配。
preg_replace("/\W/", "something else", $mystring);
如果你可以忍受不被替換的下划線,那就應該這樣做。 如果你不能,請使用
preg_replace("/[\W_]/", "something else", $mystring);
正則表達式中的\\d
, \\w
和類似的都有負面版本,它們只是同一個字母的大寫版本。
因此\\w
匹配任何單詞字符(即基本上是字母數字),因此\\W
匹配除字符之外的任何內容,所以除了字母數字之外的任何其他內容。
這聽起來像你所追求的。
有關更多信息,我建議使用regular-expressions.info 。
由於PHP 5.1.0可以使用\\p{L}
(Unicode字母)和\\p{N}
(Unicode數字),它們是類似於\\d
和\\w
unicode,用於拉丁語
preg_replace("/[^\\p{L}\\p{N}]/iu", $replacement_string, $original_string);
/iu
修飾符在模式結束時:
i (PCRE_CASELESS)
u (PCRE_UTF8)
更多信息見: https : u (PCRE_UTF8)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.