【问题标题】:How do add an exception to preg_match如何向 preg_match 添加异常
【发布时间】:2018-02-11 10:00:23
【问题描述】:

我有以下 preg_match;

preg_match('=^\d?[a-z]{1,2}\d{1,4}[a-z]{1,3}$=i', $mystring);

这很好用,但我有一些带有 /H 或其他字符的 mystrings。它们也可能以 -1、-15 或其他数字结尾。

Mystrings 可以看起来像这样 W0DLK、WA0DLK、W0DLK-1、W0DLK-20、W0DLK/H、W0DLK/M

如何添加到现有的 preg_match 以忽略“-”破折号或“/”斜杠之后的任何内容?在我的使用中,首先对值进行子串化会很困难。

【问题讨论】:

  • 有效值如下所示:W0DLK、WA0DLK、W0DLK/H、W0DLK/此处的任何字母、W0DLK-15 或破折号后的任何数字。
  • 您的第一个解决方案(如下)效果最好。谢谢!! return preg_match('=^\d?[az]{1,2}\d{1,4}[az]{1,3}(?:[-/][az\d]+)?$=i ', $呼号);

标签: php regex preg-match


【解决方案1】:

您可以在表达式末尾使用可选的捕获组,以便允许使用连字符/破折号和字符。

^\d?[a-z]{1,2}\d{1,4}[a-z]{1,3}(?:[-/][a-z\d]+)?$

这允许-/,然后是字母和/或数字。更严格的正则表达式是:

^\d?[a-z]{1,2}\d{1,4}[a-z]{1,3}(?:-\d+|/[a-z]+)?$

这允许字符串以- 和数字结尾,或者以/ 和字母结尾。

  1. https://regex101.com/r/6OxdZC/1/
  2. https://regex101.com/r/6OxdZC/2/

【讨论】:

  • 糟糕!发现一个问题。被测试的值只能有一个数字。例如W5DLK、WA5DLK、WA5DLK/H等。数字后不超过3个字符。
  • 根据您的原始正则表达式,第二个正则表达式应该能够被修改以适应。将\d 之后的+ 更改为{1,3} 并在[a-z] 之后删除+...如果我没看错的话。
猜你喜欢
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 2020-02-07
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
相关资源
最近更新 更多