当前位置:科技动态 > 通过使用 PHP 制作动态网页的示例来学习正则表达式

通过使用 PHP 制作动态网页的示例来学习正则表达式

  • 发布:2023-10-06 07:10

   首先,让我们看一下两个特殊字符:“^”和“$”。它们分别用于匹配字符串的开头和结尾。下面我们来举例说明。 :

  "^The":匹配以“The”开头的字符串;

  "of despair$":匹配以“of despair”结尾的字符串;

  “^abc$”:匹配以“of despair”结尾的字符串以abc开头和以abc结尾的字符串实际上只匹配abc;

  "notice":匹配包含notice的字符串;

  你可以​​看到,如果你不使用我们提到的两个字符(上一个例子),也就是说模式(正则表达式)可以出现在被测试字符串的任何位置,你就不会锁定它的两侧。

  还有“*”、“+”、“?”等几个字符,用于表示字符出现的次数或出现的顺序。它们分别表示:“零个或多个”、“一个或多个”、“零个或一个”。

  "ab*":匹配字符串a和由0个或多个b组成的字符串(“a”、“ab”、“abbb”等);

  “ab+”:同上,但至少有一个b(“ab”、“abbb”等);

  "ab?":匹配0个或1个b;

   "a?b+$":匹配以 1 或 0 a 加 1 或多个 b 结尾的字符串。

  还可以限制大括号中的字符数,如

  "ab{2}":匹配一个a后跟两个b(不少于)(“abb”);

  "ab{2,}":匹配至少两个b(“abb”,“abbbb”等);

  “ab{3,5}”:2-5 b(“abbb”、“abbbb”或“abbbbb”)。

   另请注意,您必须始终指定(即“{0,2}”,而不是“{,2}”)。同样,您必须注意“*”、“+”和“?”与以下三个范围注释“{0,}”、“{1,}”和“{0,1}”相同。

  现在将一定数量的字符放入括号中,例如:

  "a(bc)*":匹配a后跟0个或1个“bc”;

  “a(bc){1 ,5}”:一到五个“bc”。

   和一个字符“│”,相当于 OR 运算:

  "hi│hello":匹配包含“hi”或“hello”的字符串;

  "(b│cd)ef":匹配包含“bef”或“cdef”的字符串;

  "(a │b)*c":匹配包含多个(包括0个)a或b,后接c字符串的字符串;

  一个点('.')可以代表所有单个字符:

  "a.[0-9]":a 后跟一个字符,后跟一个数字(包含该字符串的字符串将被匹配,并且以后这个括号会被省略)

  "^.{3} $":以三个字符结尾。方括号内的内容仅匹配单个字符

  "[ab]":匹配单个a或b(同“a│b”);

  "[a-d]":匹配从'a'到'd'的单个字符(与“a│b│c│d”和“[abcd]”效果相同);

  "^[a-zA-Z] ":匹配以字母开头的字符串

  "[0-9]%":匹配包含 x% 的字符串

  ",[a-zA-Z0-9] $":匹配以逗号开头的字符 当添加以数字或字母

  结尾的字符串时,您还可以将不需要的字符列出在方括号中,只需在括号内使用“^”作为开头即可(即“%[^a-zA-Z]%”匹配包含两个百分号且内部有非字母的字符串)。

  为了能够解释清楚,但是“^.[$()│*+?{\”作为特殊含义的字符,必须在这些字符前面加上'',在php3中应该避免使用\ 在模式的开头。例如,正则表达式“(\$│?[0-9]+”应该像这样调用ereg(“(\\$│?[0-9]+”, $str)(我不知道是否在 php4 中也是一样)

  不要忘记方括号内的字符是此规则的例外 - 在方括号内,所有特殊字符,包括 (''),都将失去其特殊属性(即, "[*\+?{}.]" 匹配包含这些字符的字符串)。另外,正如 regx 手册中告诉我们的:“如果列表包含 ']',最好将其作为列表中的第一个字符(可能在'^'之后)。如果包含'-',最好将其放在第一个或最后一个,或者范围的第二个端点(即[a-d-0-9]'-'在中间会起作用的。

  为了完整起见,我应该介绍整理序列、字符类和等价类。但我不想对这些方面进行过多的讨论,也不需要在下面的文章中进行介绍。您可以在正则表达式手册页中获取更多信息。多条消息。

  如何构建一个模式来匹配货币金额的输入

  好吧,现在我们将使用我们学到的知识来做一些有用的事情:构建一个匹配模式来检查输入信息是否是一个表示的数字钱。我们认为有四种表示金额的方法:“10000.00”和“10,000.00”,或者不带小数部分的“10000”和“10,000”。现在让我们开始构建这个匹配模式:

  ^[1-9 ][0-9]*$

  这意味着所有变量必须以非 0 数字开头。但这也意味着单个“0”无法通过检验。解决方法如下:

  ^(0 │[1-9][0-9]*)$

  “只有 0 和不以 0 开头的数字匹配”,我们也可以在数字前允许有负号:

  ^(0│ -?[1-9][0-9]*)$

  这是:“0 或以 0 开头的数字,前面可能有负号。”好吧,好吧,现在我们不要那么严格了。 , 允许从 0 开始。现在让我们删除负号,因为在表示硬币时我们不需要它。现在,我们指定一个模式来匹配小数部分:

  ^[0-9]+(\.[ 0-9]+)?$

  这意味着匹配字符串必须至少以阿拉伯数字开头。但请注意上面模式中的“10”。不匹配,只有“10”和“10.2”是的。 (你知道为什么吗)

  ^[0-9]+(\.[0-9]{2})?$

  上面我们指定了小数点后必须有两位小数。如果你觉得这种情况太苛刻,你可以将其改为:

  ^[0-9]+(\.[0-9]{1,2})?$

  这将允许一个或小数点后两个字符。现在我们添加逗号(每隔三个数字)以提高可读性,我们可以这样表示:

  ^[0-9]{1,3}(,[0-9]{3})*(\ .[0 -9]{1,2})?$

  不要忘记,如果您想允许输入空白字符串,则可以将加号“+”替换为乘号“*”(为什么?)。另外不要忘记反斜杠“\”可能会导致 PHP 字符串出现错误(非常常见的错误)。现在我们可以验证字符串了,我们现在可以删除所有逗号 str_replace(",", "", $money) ,然后将类型视为 double ,以便我们可以用它进行数学计算

  构建用于检查的正则表达式email

   让我们继续讨论如何验证电子邮件地址。完整的电子邮件地址由三部分组成:POP3 用户名(“@”左侧的所有内容)、“@”、服务器名称(其余部分)。用户名可以包含大小写字母、阿拉伯数字、句点(“.”)、减号(“-”)和下划线(“_”)。服务器名称当然也符合这个规则,下划线除外。

   现在,用户名不能以句点开头和结尾。服务器也是如此。另外,您不能有两个连续的句点,并且它们之间至少有一个字符,所以现在让我们看看如何为用户名编写匹配模式:

  ^[_a-zA-Z0-9-]+$

  尚不允许句点的存在。让我们添加它:

  ^[_a- zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$

  上面的意思是:“从至少一个规范开始字符(除了 . 意外),后跟 0 一个或多个以点开头的字符串。”

  为了简化一点,我们可以使用 eregi() 而不是 ereg()。 eregi() 不区分大小写,因此我们不需要指定两个范围“a-z”和“A-Z” - 只需指定一个:

  ^[_a-z0-9-]+(\.[_a- z0-9-]+)*$

  后面的服务器名称也是如此,但删除下划线:

  ^[a-z0-9-]+(\.[a-z0-9-] +)*$

  完成。现在只需使用“@”连接两个部分:

  ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+( \.[a-z0-9-]+ )*$

  这就是完整的邮件认证匹配模式,只需调用

  eregi('^[_a-z0-9-]+(\.[_a- z0-9-]+)*@ [a-z0-9-]+(\.[a-z0-9-]+)*$ ',$eamil)

  您可以获取是否是电子邮件。

  正则表达式的其他用途

  提取字符串

  ereg()和eregi()有一个功能,可以让用户通过正则表达式提取字符串的一部分(具体用法可以阅读手册)。例如,我们要从路径/URL中提取文件名 - 以下代码就是您所需要的:

  ereg("([^\\/]*)$", $pathOrUrl, $regs);
  echo $ regs[1];

  高级替换

  ereg_replace() 和 eregi_replace() 也非常有用:如果我们想用逗号替换所有分隔的负号:

  ereg_replace("[ \n \r\t]+", " ,", 修剪($str));



相关文章

最新资讯