Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图提取;郊区名称“;从「;12街道名称、郊区名称、CTG 1234“;在php中使用regexp_Php_Regex - Fatal编程技术网

试图提取;郊区名称“;从「;12街道名称、郊区名称、CTG 1234“;在php中使用regexp

试图提取;郊区名称“;从「;12街道名称、郊区名称、CTG 1234“;在php中使用regexp,php,regex,Php,Regex,我正试图从以下内容中提取郊区名称: 12 street name, suburb name, CTG 1234 在PHP中使用regexp 街道和郊区名称可以是任意字长的数字 CTG是state的首字母缩略词,它总是为人所知,而且总是相同的 它后面是4位数的邮政编码 我已经想出了下面的正则表达式,但不能完全理解我想要的 /[\.|,]+\s*(.*?)[\.|,]+*\s*CTG\d{4,4}$/i 其中: CTG\d{4,4}$是从左侧查找邮政编码和状态 [\.\124;,]*\

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

12 street name, suburb name, CTG 1234 
在PHP中使用regexp

  • 街道和郊区名称可以是任意字长的数字
  • CTG是state的首字母缩略词,它总是为人所知,而且总是相同的
  • 它后面是4位数的邮政编码
我已经想出了下面的正则表达式,但不能完全理解我想要的

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

  • CTG\d{4,4}$
    是从左侧查找邮政编码和状态
  • [\.\124;,]*\ s*
    是在街道和郊区名称后匹配至少一个点或coma,后跟零个或多个空格
  • (.*)
    是为了捕获我的目标。郊区名称
  • *?
    因此它将是非贪婪的
上面在preg_match()中使用,任何给定主题返回匹配数组,其中:

  • 欠费[0]
    =全部匹配
  • arrey[1]=12
    =街道名称、郊区名称

但是,如果在中尝试,它似乎可以正常工作。

试试这一个
^(.*)[\.]\s+(.*)[\.]\s+CTG\s+(\d+)$
提取匹配的组号。2看起来您遗漏了CTG和数字之间的空格(而且句点不需要在括号内转义,也不需要或管道)。这应该适合您的需要:

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

您可以在

上通过示例文本查看上述模式。您可以通过以下方式获得郊区名称:

$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
/                          

分隔符未定义。可以是逗号或圆点。因此您可以使用
preg\u split
定义多个分隔符。那么问题是什么,您只希望
array[1]
包含
郊区名称
?是的。希望arrey[1]只包含郊区名称。谢谢。你的regexp正在工作!更好的是,只显示arrey[0]=郊区名称。您是如何得到欠款的[0]包含郊区名称而不是整个匹配?请解释一下。