小编典典

PHP - 初学者的正则表达式

php

我的名字是来自法国的大卫,我需要一个正则表达式来遵守以下示例。我需要找到括号之间的数据,其中包含 5 个数字、空格和城镇名称,可能后跟区号。以下是我需要查找的一些示例:

  • (05369 Toussus) 好的
  • (56236 回声长)好的
  • (56236 Echoes-le-long) 好的
  • (44896 St-Erme-O.&R.) 好的
  • (89569 亚眠 /1) 好的
  • (89569 亚眠 /1/) 好的
  • (56236 回声长 /2)好的

这是我不想遵守的我需要的:

  • (454683135 sdf1zg6er5e5z)KO
  • (gsdsgfdgsd 4561261)KO
  • (16 gsdvgfsvg jythjuyt)KO

我尝试使用这个正则表达式,但这不起作用:

!\(([0-9]{5}.*[A-Z\-. \&\/].*[\/1-2]{2})\)!

我也试过这个,但不符合所有:

!\(([0-9]{5}.*[A-Z\-. \&\/])\)!

我能得到一些帮助吗?


阅读 129

收藏
2022-07-25

共1个答案

小编典典

/\(\d{5}\s[a-zA-Z][\w\s\-\/\.&]*\)/
\(`为了`(

\d{5}5位数

\s对于单个空格字符

[a-zA-Z]对于单个字母字符

[a-zA-Z]对于单个字母字符

[\w\s\-\/\.&]*`对于任意数量(0-无穷大)的字母字符,空格,, `-`, `/`, `.`,`&
\)`为了`)

测试页面和PHP使用:

$pattern = '/\(\d{5}\s[a-zA-Z][\w\s\-\/\.&]*\)/m';

preg_match_all($pattern, $str, $matches, PREG_SET_ORDER, 0);

var_dump($matches);

如果您想使用捕获组捕获信息,此模式将使用邮政编码作为第 1 组,将城镇名称作为第 2 组,将区号作为可选的第 3 组。

/\((\d{5})\s([a-zA-Z][\w\s\-\.&]*)(?>\s\/(\d)\/*)*\)/

编辑:

通过将字符类从更改为[a-zA-Z][a-zA-Z\x{00C0}-\x{017F}]您也可以匹配所有重音字符。这会将完整表达式更改为:

/\((\d{5})\s([a-zA-Z\x{00C0}-\x{017F}][\w\s\-\.&]*)(?>\s\/(\d)\/*)*\)/

您可以将此范围更改为您想要的任何值。这些代码来自 unicode 代码,可以在这里找到。我包括的范围是从Latin-1 Supplement Uppercase LettersLatin Extended-A European Latin

2022-07-25