簡體   English   中英

PHP中的preg_replace - NOT條件的正則表達式

[英]preg_replace in PHP - regular expression for NOT condition

我正在嘗試使用preg_replace在PHP中編寫一個函數,它將替換列表中找不到的所有字符。 通常我們會替換它們的位置,但這個不同。

例如,如果我有字符串:

$mystring = "ab2c4d";

我可以編寫以下函數,用*替換所有數字:

preg_replace("/(\d+)/","*",$mystring);

但我想從a到z替換那些既不是數字也不是字母的字符。 它們可能是#$ *();〜!{} [] | \\ /。,<>? 等等

所以除了數字和字母之外的任何東西都應該被別的東西取代。 我怎么做?

謝謝

您可以使用否定的字符類 (在類的開頭使用^ ):

/[^\da-z]+/i

更新:我的意思是,你必須使用一個否定的字符類,你可以使用我提供的那個,但也有其他的;)

你想使用一個否定的“字符類” 它們的語法是[^...] 在你的情況下,我認為只是[^\\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)更多信息見: httpsu (PCRE_UTF8)

暫無
暫無

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

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