2010-05-16 54 views
4

正則表達式的哪些特徵是標準的,哪些特徵是特殊的?
如果我想在不同的上下文,語言,平臺中使用相同的正則表達式,我該怎麼做,而不是做什麼?如何製作便攜式正則表達式?

回答

4

沒有標準,但如果最大的可移植性是你的目標,你應該堅持由JavaScript正則表達式支持的功能。所有其他的主要口味都支持JS所做的一切,在這裏和那裏只有很小的變化。例如,有些僅支持POSIX字符類表示法([:alpha:]),而另一些則使用Unicode語法(\p{Alpha})。

也許最麻煩的變化是那些影響點(.)和錨點(^$)。例如,JavaScript沒有DOTALL(或「單行」)模式,因此要匹配任何東西,包括換行,您必須使用類似[\s\S]的攻擊。與此同時,Ruby有一個DOTALL模式,但將其稱爲多行模式 - 其他人其他稱爲「多行」(^$作爲行錨)是Ruby總是如何工作的。

也請注意點的不匹配(默認模式)。傳統上,這只是換行(\n),但越來越多的口味採用(或至少接近)關於行分隔符的Unicode guidelines。例如,在Java中,點不匹配[\r\n\u0085\u2028\u2029]中的任何一個,而^$\r\n視爲單個分隔符,並且在兩個字符之間不匹配。

請注意,我只是在談論Perl派生的風格,如Python,Ruby,PHP,JavaScript等。如果使用基於GNU或POSIX的風格,比如grep,awk和MySQL的;他們傾向於擁有較少的功能,但這不是您選擇它們​​的原因。

我也不包括XML架構風格;它比JavaScript更有限,但它是一個專門的應用程序。例如,它不支持錨(^$\A\Z等),因爲匹配總是錨定在兩端。

+0

艾倫,您對我的回答的評論只是一個,因此我將其刪除(因爲您對所提出的問題的答案更好!)。 +1 – 2010-05-16 12:15:57

1

在這裏您可以找到一個好的reference。 在這裏你有最好的book我曾閱讀過有關這個問題。 然後在這個page,下語言功能(第1部分& 2)你可以看到一些差異