我用單引號包裝了我的第一個內容字符串,以簡化我所要求的內容。它沒有包裝在我的代碼中。爲什麼這個正則表達式在perl中不能評估爲true?
'{
# "ERROR" : [
# "generic error message"
# ]
# }' =~ {
好像因爲我只是在檢查第一個表達式爲開放式支架,但其評估爲假,這應該是真實的。
我用單引號包裝了我的第一個內容字符串,以簡化我所要求的內容。它沒有包裝在我的代碼中。爲什麼這個正則表達式在perl中不能評估爲true?
'{
# "ERROR" : [
# "generic error message"
# ]
# }' =~ {
好像因爲我只是在檢查第一個表達式爲開放式支架,但其評估爲假,這應該是真實的。
在PHP語言中,一個正則表達式只是一個普通的字符串,完整的報價:"/regex/"
。另一方面,Perl具有正則表達式文字。這些直接嵌入到代碼中,但仍需要分隔符。
一般情況下,這看起來像:
$string =~ /regex/
的斜槓是默認的分隔符。如果斜線是一個不方便的分隔符,您可以選擇任何其他(1) - 只要在m
(用於匹配)前綴正則表達式。這些比賽是等價的:
$url =~ /http:\/\///;
$url =~ m/http:\/\///;
$url =~ m{http://};
如果你想存儲預編譯的正則表達式中的變量,你可以使用qr//
引號。不想這些平淡的字符串,因爲qr//
正則表達式遵循相同的引用規則的正則表達式(無雙逃逸):
my $url_regex = qr~http://~;
$url =~ $url_regex;
的=~
綁定運營商試圖盡力解釋右手參數作爲一個正則表達式,所以你甚至可以使用類似php的字符串:
"123\nab12" =~ "\\d\n\\w+"; # double escaping sucks, still matches
但是這比/\d\n\w+/
差。
因此,不可能任何跳過任何分隔符:
# "=~" has higher precedence than "+".
# Establishing precedence is the *sole* task of the parens here
"112" =~ (1+2); # fails
"3" =~ (1+2); # matches
"112" =~ /1+2/; # matches
試試這個:如圖所示,因爲{
是不是正則表達式
'your string' =~ /\{/
你的語法無效。爲了解決這個問題,我將它封裝在默認的正則表達式字符中以獲得/{/
,然後轉義{
(導致/\{/
),因爲它是正則表達式語法的元字符。 (對於正則表達式x{a,b}
意味着x
應至少重複a
,最多b
次)。
咦?什麼?該代碼不完整。你的意思是正則表達式'/ {/'(它的工作原理)? – amon
現在不需要perl,但可能會因爲它是元字符而逃脫它? '\ {' –
@amon在perl中使用=〜運算符進行評估時,是否需要包裝正則表達式? – Rooster