正则表达式引擎中字符串开始和结束的锚定

发布人:webmaster  时间:2007-11-12 22:42  来源: 本站原创  查看: 423次   TAG: PHP正则  开始  结束 

锚定和一般的正则表达式符号不同,它不匹配任何字符。相反,他们匹配的是字符之前或之后的位置。“^”匹配一行字符串第一个字符前的位置。<<^a>>将会匹配字符串“abc”中的a<<^b>>将不会匹配“abc”中的任何字符。


类似的,$匹配字符串中最后一个字符的后面的位置。所以<<c$>>匹配“abc”中的c


 


·        锚定的应用


在编程语言中校验用户输入时,使用锚定是非常重要的。如果你想校验用户的输入为整数,用<<^\d+$>>


用户输入中,常常会有多余的前导空格或结束空格。你可以用<<^\s*>><<\s*$>>来匹配前导空格或结束空格。


 


·        使用“^”和“$”作为行的开始和结束锚定


如果你有一个包含了多行的字符串。例如:“first line\n\rsecond line(其中\n\r表示一个新行符)。常常需要对每行分别处理而不是整个字符串。因此,几乎所有的正则表达式引擎都提供一个选项,可以扩展这两种锚定的含义。“^”可以匹配字串的开始位置(f之前),以及每一个新行符的后面位置(\n\rs之间)。类似的,$会匹配字串的结束位置(最后一个e之后),以及每个新行符的前面(e\n\r之间)


.NET中,当你使用如下代码时,将会定义锚定匹配每一个新行符的前面和后面位置:Regex.Match("string", "regex", RegexOptions.Multiline)


应用:string str = Regex.Replace(Original, "^", "> ", RegexOptions.Multiline)--将会在每行的行首插入“> ”。


 


·        绝对锚定


<<\A>>只匹配整个字符串的开始位置,<<\Z>>只匹配整个字符串的结束位置。即使你使用了“多行模式”,<<\A>><<\Z>>也从不匹配新行符。


即使\Z$只匹配字符串的结束位置,仍然有一个例外的情况。如果字符串以新行符结束,则\Z$将会匹配新行符前面的位置,而不是整个字符串的最后面。这个“改进”是由Perl引进的,然后被许多的正则表达式实现所遵循,包括Java.NET等。如果应用<<^[a-z]+$>>到“joe\n”,则匹配结果是“joe”而不是“joe\n”。

相关阅读

本月热门