有人可以告訴我這兩個正則表達式之間的區別嗎?正則表達式差異
'/[^a-zA-Z0-9\s]/'
和
'~[^A-Za-z0-9_]~'
此外,有沒有第一個正則表達式內的空間語法錯誤?認爲它需要像這樣:/\s
才能正確轉義。
基本上,我需要一個正則表達式,它只使用英文A-Z,a-z,0-9和下劃線!其他所有內容都需要用空字符串''
替換。所以,我知道我需要preg_replace來做到這一點,但哪個RegEx更好用,爲什麼?
謝謝很多傢伙!
有人可以告訴我這兩個正則表達式之間的區別嗎?正則表達式差異
'/[^a-zA-Z0-9\s]/'
和
'~[^A-Za-z0-9_]~'
此外,有沒有第一個正則表達式內的空間語法錯誤?認爲它需要像這樣:/\s
才能正確轉義。
基本上,我需要一個正則表達式,它只使用英文A-Z,a-z,0-9和下劃線!其他所有內容都需要用空字符串''
替換。所以,我知道我需要preg_replace來做到這一點,但哪個RegEx更好用,爲什麼?
謝謝很多傢伙!
PCRE模式字符串的第一個字符是一個分隔符,用於標記正則表達式的結尾和modifier characters的開頭。選擇是任意的;您可以使用'/'
或'~'
或其他字符,但請注意,如果您需要表達式部分中的字符,則需要將其轉義。
在字符類中,\s
表示任何空格字符。因此'/[^a-zA-Z0-9\\s]/'
匹配集合A-Z,a-z,0-9和空格字符中的一個字符而不是。 '~[^A-Za-z0-9_]~'
匹配集合A-Z,a-z,0-9和下劃線('_'
)中的一個字符而不是。
滿足您的要求的一個模式字符串是'~[^A-Za-z0-9_]+~s'
:
<?php
$str = <<<STR
test_
one
two Three 45
STR;
echo preg_replace('~[^A-Za-z0-9_]+~s', '', $str);
,輸出:
test_onetwoThree45
RegEx末尾的'+〜s'到底做了什麼? – SoLoGHoST
@SoLoGHoST:正則表達式是'[^ A-Za-z0-9 _] +'。 '+'的意思是「匹配前一件事貪婪一次或多次」。在這種情況下,「以前的事物」是否定類'[^ A-Za-z0-9_]'。 's'是一個修飾符。這意味着「[表達式]中的點元字符匹配所有字符,包括換行符」。在這種情況下沒有必要,因爲否定類總是包含換行符(除非\ n已列出)。不過,如果我想要一個正則表達式匹配多行文本以防止後來出現問題時,我喜歡將它包括在內,如果將其更改爲包含'.'元字符。 –
您正則表達式內的^
意味着不...這是
[^a-zA-Z0-9]
表示該字符串沒有az,AZ和0-9,所以如果要替換不在這些範圍內的所有字符(包括'_'),則必須使用以下語句:
$ cleanString = preg_replace('/ [^ a-zA-Z0-9 _] /','',$ theString);
'\ s'意思是'任何空格字符',所以你會想使用第二個。我不知道關於'/'和'〜'哪個更好。 – Bojangles
那麼,使用第一個會讓空白字符通過比正確的? – SoLoGHoST
我對'〜'和'/'之間的區別也很感興趣。有什麼不同? – SoLoGHoST