我的名字是来自法国的大卫,我需要一个正则表达式来遵守以下示例。我需要找到括号之间的数据,其中包含 5 个数字、空格和城镇名称,可能后跟区号。以下是我需要查找的一些示例:
这是我不想遵守的我需要的:
我尝试使用这个正则表达式,但这不起作用:
!\(([0-9]{5}.*[A-Z\-. \&\/].*[\/1-2]{2})\)!
我也试过这个,但不符合所有:
!\(([0-9]{5}.*[A-Z\-. \&\/])\)!
我能得到一些帮助吗?
/\(\d{5}\s[a-zA-Z][\w\s\-\/\.&]*\)/ \(`为了`(
\d{5}5位数
\d{5}
\s对于单个空格字符
\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}]您也可以匹配所有重音字符。这会将完整表达式更改为:
[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 Letters到Latin Extended-A European Latin
Latin-1 Supplement Uppercase Letters
Latin Extended-A European Latin