有一些我们可以作为正则表达式的部分的一些Posix-标准预定义类,包括[:alnum:], [:digit:], [:lower:]等等。 完整的列表可以在这里查看
我们可以像这样匹配单个空白字符:
<?php echo ereg("Mitchell[[:space:]]Harper", "Mitchell Harper"); ?>
我们也可以通过在表达式后用?字符来告诉正则表达式引擎匹配没有空白或者一个空白。
<?php echo ereg("Mitchell[[:space:]]?Harper", "MitchellHarper"); ?>
模式分组
相关的模式可以在方括号里分在一起。很容易用[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"); ?>
词语分组
不仅仅搜索模式可以分组,我们也可以用圆括号把相关的搜索词语进行分组。
<?php echo ereg("^(John|Jane).+$", "John Doe"); ?>
在上面的例子中,我们有一个字符串头部字符,紧跟着"John"或者"Jane",至少有一个其它字符,然后一个字符串尾部字符。所以…
<?php echo ereg("^(John|Jane).+$", "Jane Doe"); ?>
...将也匹配我们的搜索模式
特殊字符的情形
因为一些字符要用在一个搜索模式的明确分组或者语法上,像在(John|Jane)中的圆括号,我们需要告诉正则表达式引擎来屏蔽这些字符,加工它们使之成为被搜索字符串的一部分,而不是搜索表达式的一部分。我们所用的方法称为“字符转义”,涉及到将任何“专用符号”加上反斜杠。所以,例如,如果我想在我的搜索中包含’|’,那么我就可以这样做
<?php echo ereg("^[a-zA-z]+|[a-zA-z]+$", "John|Jane"); ?>
这里只是少量的一些你要转义的字符,你必须转义^, $, (, ), ., [, |, *, ?, +, and { 。
希望你现在对正则表达式实际上有多么强大有了一点点感觉了。现在让我们看两个用正则表达式来检查数据中一个字符串的例子。
正则表达式例子
例子1
让我们把第一个例子做的相当简单,检验一个标准的URL.一个标准的URL(没有端口号),有三个部分构成: |