php - 尝试使用正则表达式从 php 中的 "suburb name"中提取 "12 street name, suburb name, CTG 1234"

标签 php regex

我正在尝试从以下内容中提取郊区名称:

12 street name, suburb name, CTG 1234 

在 PHP 中使用正则表达式。

  • 街道和郊区名称的长度可以是任意数量。
  • CTG 是 state 的缩写,总是已知且始终相同。
  • 后面是 4 位数的邮政编码。

我想出了以下正则表达式,但无法完全理解我想要的内容。

/[\.|,]+\s*(.*?)[\.|,]+*\s*CTG\d{4,4}$/i

地点:

  • CTG\d{4,4}$ 是从左边查找邮政编码和州。
  • [\.|,]*\s* 匹配街道和郊区名称后至少一个点或逗号,后跟零个或多个空格。
  • (.*?) 是捕获我的目标。郊区名称。
  • *? 所以它将是非贪婪的。

上面在 preg_match() 中使用,任何给定主题都会返回匹配数组,其中:

  • arrey[0] = 整个比赛
  • arrey[1]=12 = 街道名称、郊区名称

但是如果在 http://www.regexplanet.com 中尝试过看起来效果很好。

最佳答案

您可以通过以下方式获取郊区名称:

$str = '12 street name, suburb name, CTG 1234';
$pattern = '/[^.,]++(?=[.,]\s*CTG \d{4}$)/';

preg_match($pattern, $str, $result);

echo $result[0];

为了仅匹配郊区名称,我使用了前瞻断言 (?=...),该断言仅执行检查而不记录匹配。

图案详细信息:

/
[^.,]++            # all that is not a . or a , one or more times (possessive)
(?=                # open lookahead assertion (means "followed by")
    [.,]\s*        # a . or a , with optional white characters
    CTG \d{4}$     # CTG, a space, four digits, end of string
)                  # close the lookahead
/                          

关于php - 尝试使用正则表达式从 php 中的 "suburb name"中提取 "12 street name, suburb name, CTG 1234",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19334417/

相关文章:

php - 避免 mysql 中的时间/日期重叠(laravel)

php - 如何使用 Group By 组合这两个 MySQL 查询

php - MySQL - 使其他列成为自动增量列的函数

java - 在java中的括号内拆分加密文本

javascript - 单词边界与 Javascript 中的开头或结尾不匹配

正则表达式模式匹配在 scala.js 中不起作用?

php - 可以替代MySQL吗?

php - 如何在 PHP 中用单个空格正确替换多个空格?

java - 正则表达式从 JSON 字符串中提取对象

Java删除文本文件中不需要的空格并替换为字符