2017-09-02 52 views
2

我有以下preg_match;如何添加一个例外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忽略后面的所有 ' - ' 破折号或'/'斜杠?首先对值进行分组将很难在我的使用中。

+0

有效值是这样的:W0DLK,WA0DLK,W0DLK/H,W0DLK /这里的任何信件,W0DLK-15,或破折号后的任何数字。 –

+0

你的第一个解决方案(如下)工作得最好。谢谢!!返回preg_match('=^\ d?[az] {1,2} \ d {1,4} [az] {1,3}(?:[ - /] [az \ d] +)?$ = i ',$ callsign); –

回答

0

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

^\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/
+0

哎呀!发现问题。被测值中只能有一个数字。例如W5DLK,WA5DLK,WA5DLK/H等,数字后不超过3个字符。 –

+0

根据您的原始正则表达式,第二个正则表达式应该能够被修改以适应。把'\ d'后面的'+'改成'{1,3}'并在'[a-z]后面删除'+'......如果我已经阅读了这个权利。 – chris85

相关问题