正则表达式语法
在调用正则表达式函数之前,必须先建立正则表达式。本节通过例子学习正则表达式的语法。
1.字符串头部
搜索一个字符串的头部,用^,例如
<?php echo ereg(“^hello”,”hello world”); ?>
将返回true,但是
<?php echo “^hello”,”I say hello world”); ?>
将返回false,因为hello不在字符串“I say hello world”的头部。
2.字符串尾部
搜索字符串的尾部,用$,例如:
<?php echo ereg(“bye$”,”goodbye”); ?>
将返回true,但是
<?php echo ereg(“bye$”,”goodbye my friend”); ?>
将返回false,因为bye不在字符串“goodbye my friend”的尾部。
3.任意的单个字符
搜索任意字符,用点(.),例如:
<?php echo ereg(“.”,”cat”); ?>
将返回true,但是
<?php echo ereg(“.”,””); ?>
将返回false,因为要搜索字符串没有包含字符。
4.限制匹配字符数量
可以用花括号告诉正则表达式引擎它要匹配多少个单个字符。如果只想匹配5个字符,可以这样用ereg:
<?php echo ereg(“.{5}$”,”12345”); ?>
上面的这段代码告诉正则表达式引擎:当且仅当至少5个连续的字符出现在字符串的尾部时返回true。也可以限制连续出现的字符的数目:
<?php echo ereg(“a{1,3}$”,”aaa”); ?>
上面的例子里,已经告诉正则表达式引擎,搜索字符串来匹配表达式,他在尾部必须有1~3个字符”a”。
<?php echo ereg(“a{1,3}$”,”aaab”); ?>
上面的例子将不会返回true,虽然有三个“a”字符在搜索字符串里,但是他们不是在字符串的尾部。如果把结尾字符串匹配符“$”从正则表达式中去掉,那么这个字符串时匹配的。
也可以告诉正则表达式引擎来匹配至少有确定数目的字符搜索字符串中,代码如下:
<?php echo ereg(“a{3,}$”,”aaaa”); ?>
5.零次或多次重复字符
为了告诉正则表达式引擎一个字符可能存在,也可以重复,使用符号“*”。下面的两个例子都将返回true。
<?php echo ereg(“t*”,”tom”); ?>
<?php echo ereg(“t*”,”fom”); ?>
即使第二个例子不包含”t”这个字符,但仍旧返回true,因为*表示字符“t”可以出现,但不是必须出现。事实上,任何普通的字符串模式都会使上面的ereg调用返回true,因为”t“字符是可选的。
6.一次或多次重复字符
为了告诉正则表达式引擎一个字符必须存在,也可以重复不止一次,使用“+”字符:
<?php ehco ereg(“z+”,”I like the zoo”); ?>
下面的例子也会返回true:
<?php ehco ereg(“z+”,”I like the zzzzzzzzzzzooo!”); ?>
7.零次或一次重复字符
可以告诉正则表达式引擎,一个字符最多只能出现一次,使用"?"字符:
<?php echo ereg("c?","cats are fuzzy"); ?>
如果从上面的搜索字符串中删除“c”,这个表达式会仍旧返回true 。因为“?”的意思是"c"可以出现在搜索字符串的任何地方,但不是必须的。
8.空格字符
需要匹配搜索字符串中的空格字符时,需要使用“[[:space]]”,方括号标明连续字符的相关性,":space:”是实际要匹配的类(在这种情形下,是任何空白字符)。空白字符包括tab字符、换行字符、空白字符等。
如果要求搜索字符串必须包含一个空格,而不是tab 字符或者换行字符,可以使用一个空格字符(" " )。在大多数情况下,建议使用":space:",因为这意味着不仅仅是单个空格字符。可以像下面这样匹配单个空白字符:
<?php echo ereg("Mitchell[[:space:]]Harper","Mitchell Harper"); ?>
也可以通过在表达式后用?字符来告诉正则表达式匹配没有空白或者一个空白:
<?php echo ereg("Mitchell[[:space:]]?Harper","Mitchell Harper"); ?>
9 .模式分组
我们可以把有类似查找需求的内容放置在一个组里,成为模式分组。分组用的字符是方括号,比如我们可以用[a-z]指定搜索字符串中只有一个小写字母,用[A-z]指定搜索字符串中只有大写字母。实例代码如下:
<?php
//要求从第一个到最后一个都是小写字母
echo ereg("^[a-z]+$","johndoe");//返回true
?>
<?php
//要求从第一个到最后一个都是大写字母
ereg("^[A-Z]+$","JOHNDOE");//返回true?
?>
如果需要告诉正则表达式引擎,小写字母和大写字母都可以,则只要把[a-z]和[A-Z]模式结合在一起就可以:
<?php echo ereg("^[a-zA-Z])+$","johnDoe"); ?>
在上面的例子里,如果能匹配"john Doe"而不是"johnDoe",将是非常有意义的。用下面的正则表达式来实现:
^[a-zA-Z]+[[:space:]]{1}[a-zA-Z]+$
很容易搜索一个数字字符串:
<?php echo ereg("^[0-9]+$","12345"); ?>
10.词语分组
不仅仅搜索模式可以分组,也可以用圆括号把相关的搜索词语进行分组。
<?php echo ereg("^(John|Jane).+$","John Doe"); ?>
在上面的例子中,正则表达式匹配条件是:"John"或者"Jane"开头,后面至少有一个其他字符,所以返回值为TRUE 。下面的表达式返回值也为TRUE :
<?php echo ereg("^John|Jane).+$","Jane Doe");?>
11.特殊字符的情形
如果要把正则表达式中有特殊意义的字符(如方括号、圆括号),作为搜索表达式的一部分,使之失去原有的意义,则需要“字符转义”。具体做法是在这些专用符号前面加上反斜杠。所以,如果在搜索中包含’|' ,那么就可以这样做:
<?php echo ereg("^[a-zA-Z]+\|[a-zA-z]+$","Jone|Jane");?>
在设计正则表达式时,必须转义的字符还包括:^,$,(,),.,[,|,*,?,+,\ and {。
正则表达式语法
最新推荐文章于 2024-08-24 21:08:19 发布