當我學習正則表達式時,我知道它們應該以斜槓字符開頭和結尾(後面跟着修飾符)。正則表達式打開和關閉字符
例如/狗/我
然而,在許多例子中我看到他們開始與其他字符,如@,#,和結束|。
例如|狗|
有什麼區別?
當我學習正則表達式時,我知道它們應該以斜槓字符開頭和結尾(後面跟着修飾符)。正則表達式打開和關閉字符
例如/狗/我
然而,在許多例子中我看到他們開始與其他字符,如@,#,和結束|。
例如|狗|
有什麼區別?
一些RE引擎將允許您使用不同的字符,以避免在RE中使用時需要轉義這些字符。
例如,對於sed
,可以使用任一的:
sed 's/\/path\/to\/directory/xx/g'
sed 's?/path/to/directory?xx?g'
後者往往是更具有可讀性。前者有時被稱爲「傾斜牙籤」。用Perl,您可以使用的:
$x =~ /#!\/usr\/bin\/perl/;
$x =~ m!#\!/usr/bin/perl!;
但我還是主張後者則是對眼睛更容易,尤其是在RE的獲得非常複雜。那麼,就像任何 Perl代碼一樣容易:-)
這從一個正則表達式味道差異巨大到下一個。例如,JavaScript只允許使用正斜槓(或solidus)作爲正則表達式文本的分隔符,但在Perl中,您可以使用任何標點符號 - 包括更新版本中的非ASCII字符,如«
和»
。當您使用進來的平衡雙象大括號,括號,或者上面的雙箭頭引號字符,他們必須保持良好的平衡:
m«\d+»
s{foo}{bar}
紅寶石,您還可以選擇不同的分隔符,如果你使用%r
前綴,但我不知道這是否延伸到平衡分隔符或非ASCII字符。許多語言根本不支持正則表達式文字;您只需將正則表達式寫爲字符串文字,例如:
r'\d+' // Python
@"\d+" // C#
"\\d+" // Java
請注意Java版本中的雙反斜槓。這是必要的,因爲字符串得到了兩次處理:一次由Java編譯器處理,一次由Pattern類的compile()
方法處理。大多數其他語言提供了字符串文字的「原始」或「逐字」形式,這些形式幾乎消除了這種反斜槓。
然後就是PHP。它的preg
正則表達式函數建立在PCRE庫之上,它嚴格模仿Perl的正則表達式,包括各種各樣的分隔符。然而,PHP本身不支持正則表達式文字,所以你必須給他們寫,好像他們是嵌入在字符串中的正則表達式文字,就像這樣:
'/\d+/g' // match modifiers go after the slash but inside the quotes
"{\\d+}" // double-quotes may or may not require double backslashes
最後請注意,即使是那些做語言都支持正則表達式的文字通常不會提供像Perl的s/…/…/
構造。最接近的是一個函數調用,它將第一個參數取爲正則表達式,將第二個字符串取爲字符串,如下所示:
s = s.replace(/foo/i, 'bar') // JavaScript
s.gsub!(/foo/i, "bar") // Ruby