首页 > PHP > PHP正则表达式速度入门续

PHP正则表达式速度入门续

2009年1月13日

继上一篇PHP正则表达式速度入门之后, 这里我个人再做一些补充.

1. 关于常用的一些元字符”*”、”+”以及”?”.
“*”表示其前导字符可以在要匹配的对象中出现零次或连续多次.
示例: 表达式为/foo*/,
匹配对象字符串为”foddddfooodsdasdsfooafdsdsfooooooooodsdadao”,进行匹配后可以得到匹配结果
fo、fooo、foo、fooooooooo
snap4

“+”表示其前导字符必须在匹配对象中连续出现一次或多次.
示例: 表达式/foo+/, 匹配对象还是上面的例子, 进行匹配后得到匹配结果
fooo、foo、fooooooooo
snap5

“?”表示其前导字符必须在匹配对象中连续出现零次或一次.
示例: 表达式/foo?/, 匹配对象还是上面的例子, 进行匹配后得到匹配结果
fo、foo、foo、foo
snap7

表达式fo{2,4}表示前导字符o可以在匹配对象中连续出现2-4次, fo{2,}表示前导字符o可以在匹配对象中连续出现2以上.

2. 其他的几个重要的元字符
\s:用于匹配单个空格符,包括tab键和换行符;
\S:用于匹配除单个空格符之外的所有字符;
\d:用于匹配从0到9的数字;
\w:用于匹配字母,数字或下划线字符;
\W:用于匹配所有与\w不匹配的字符;
. :用于匹配除换行符之外的所有字符。
其实\s和\S, \w和\W就是互逆运算.

例如简单来说/\s+/将匹配目标对象中的一个或多个空格.

3. 定位符
“^”, “$”, “\b” 以及 “\B”.
“^”定位符规定匹配模式必须出现在目标字符串的开头.
“$”定位符规定匹配模式必须出现在目标对象的结尾.
“\b”定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一.
“\B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。

同样,我们也可以把”^”和”$”以及”\b”和”\B”看作是互为逆运算的两组定位符。举例来说:

/^hell/ 可以与目标对象中以 “hell”, “hello”或 “hellhound”开头的字符串相匹配。
/ar$/ 可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。

/\bbom/ 可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。
/man\b/ 可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。

4. /([a-z][A-Z][0-9])+/
上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。

如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|”。例如:
/to|too|2/
上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。

正则表达式中还有一个较为常用的运算符,即否定符 “[^]”。与我们前文所介绍的定位符 “^” 不同,否定符 “[^]”规定目标对象中不能存在模式中所规定的字符串。例如:
/[^A-C]/
上述字符串将会与目标对象中除A,B,和C之外的任何字符相匹配。一般来说,当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符.

本文中所使用的正则工具为RegexBuddy3.0.5-Crack, 强大无比, 强烈推荐正则表达式必备.
迅雷下载:thunder://QUFmdHA6Ly8yMTAuNTEuMTgwLjI1Mi9iYnMvY29
tcHV0ZXIvUmVnZXhCdWRkeS4zLjAuNS5DcmFja1t3d3cuVG9wU2FnZS5jb21dLnJhclpa

admin PHP

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.