尝试使用正则表达式从 php 中的“12 街道名称,郊区名称,CTG 1234”中提取“郊区名称”


Trying to extract "suburb name" from "12 street name, suburb name, CTG 1234" in php using regexp

我正在尝试从以下内容中提取suburb name

12 street name, suburb name, CTG 1234 

在 PHP 中使用正则表达式。

  • 街道和郊区名称都可以是任意数量的单词。
  • CTG是状态的首字母缩写,总是已知的,总是相同的。
  • 后跟 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
/                          

^(.*)['.,]'s+(.*)['.,]'s+CTG's+('d+)$提取匹配组号试试这个。2.

看起来您错过了 CTG 和数字之间的空格(句点也不需要在括号内转义,也不需要 OR 管道)。这应该适合您的需求:

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

您可以在 PHP Live Regex 上看到带有示例文本的上述模式