PHP正则表达式精选集

42 阅读2分钟

PHP正则表达式,就像是一把锋利的文本猎刀,在字符串的世界里捕捉你想要的猎物。在这个文字的狩猎场,正则表达式是规则的王者,无论多么狡猾的文本都逃不过它的法网。

首先,让我们从电子邮件地址捕获开始,这是正则的经典用例之一。想像你面前有一大堆乱糟糟的字符串,而你需要从中提取出格式正确的电子邮箱,如同从沙堆里寻找金子。PHP 正则表达式就是你的筛子:

$pattern = '/[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,}$/i';

这行代码像是一个专业的邮件探测器,逐个筛选每个可能的邮箱地址,无论它藏在哪个角落。

接下来,我们来看看如何挑战那些特立独行的URL。这些线上的地址,有时简洁如诗,有时又杂乱无章。我们需要一条正则表达式,既能欣赏它们的美,又能辨认它们的真伪:

$pattern = '/\bhttps?://[a-z0-9-]+(.[a-z0-9-]+)*(/[a-z0-9-]*)*/?(?[a-z0-9-_=&]*)?(#[a-z0-9-_]*)?\b/i';

这如同一个网络世界的指南针,带你穿梭于形形色色的网址之中,不迷失方向。

当然,我们不能忘记电话号码。这些数字组合,或长或短,有的还带有国家代码。它们如同藏在数字迷宫中的秘密代号,等待被揭晓:

$pattern = '/(?(\d{3}))?[-.\s]?\d{3}[-.\s]?\d{4}/';

上述正则表达式犹如数字世界的解码器,不管电话号码伪装得多么高深莫测,它都能识破真面目。

然而,在正则表达式的王国中,还有一些特别的字符,它们就像魔法符号,能给表达式赋予特殊的力量,比如:

  • ^ 表示起始
  • $ 代表终结
  • . 表示任意单个字符
  • * 代表前面的字符可以出现零次或多次
  • + 表示前面的字符至少出现一次
  • ? 表示前面的字符最多出现一次
  • {n} 精确匹配前面的字符n次
  • (a|b) 表示匹配a或者b
  • \d 表示匹配数字
  • \w 表示匹配字母、数字或下划线
  • \s 代表匹配空白符
  • [] 匹配括号内的任何字符

现在,我们拉近镜头到一些特定场景:

倘若你要校验一个密码,确保它既有大写字母,又有小写字母,还得有数字,长度6到18位之间。正则表达式给你筑起一个密码强度的检查站:

$pattern = '/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,18}$/';

这行代码如同一个严格的守门人,仔细检查每一个试图进入的密码,确保它们都符合规定的标准。

总之,PHP正则表达式是编程世界里的瑞士军刀,无论你遇到怎样的文本挑战,只要拿出这把工具,总能找到解决问题的钥匙。就像一位身怀绝技的武林高手,对手无论千变万化,都能以不变应万变。它们复杂但不可或缺,是代码世界中的精妙艺术。