正则表达式的哪些特征是标准的,哪些是特殊的? 如果我想在不同的上下文,语言,平台中使用相同的正则表达式,我该怎么做,而不是做什么?
答案 0 :(得分: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等。如果像grep那样包含基于GNU或POSIX的风格是没有意义的,awk和MySQL;它们的功能往往较少,但这并不是你想要的功能。
我也没有包含XML Schema风格;它比JavaScript更受限制,但它是一个专门的应用程序。例如,它不支持锚点(^
,$
,\A
,\Z
等),因为匹配始终锚定在两端。
答案 1 :(得分:1)