我有很多这样的字符串:
"Dirección: AV. RIVADAVIA 11440 Horario de atención: 08:01 a 21:00 hs"
"Dirección: AV. RIVADAVIA 11441 Horario de atención: 08:02 a 21:00 hs"
"Dirección: AV. RIVADAVIA 11442 Horario de atención: 08:03 a 21:00 hs"
"Dirección: AV. RIVADAVIA 11443 Horario de atención: 08:04 a 21:00 hs"
"Dirección: xxxxx Horario de atención: 08:05 a 21:00 hs"
第一个问题:我需要获取" xxxxx"摆放在。它可以是一个词,也许更多,它是一个地址。
第二个问题:地址后面的文字是可选的,所以我可以有这样的东西
"Dirección: CALLE 137 E/ 32 Y 32BIS"
如何从字符串中获取地址?
答案 0 :(得分:1)
您可以使用lookaround assertions的正则表达式。例如:
<?php
$strings = <<<EOF
Dirección: AV. RIVADAVIA 11440 Horario de atención: 08:01 a 21:00 hs
Dirección: AV. RIVADAVIA 11441 Horario de atención: 08:02 a 21:00 hs
Dirección: AV. RIVADAVIA 11442 Horario de atención: 08:03 a 21:00 hs
Dirección: AV. RIVADAVIA 11443 Horario de atención: 08:04 a 21:00 hs
Dirección: xxxxx Horario de atención: 08:05 a 21:00 hs
EOF;
preg_match_all('/(?<=Dirección:\s).*(?=Horario de atención)/', $strings, $matches);
print_r($matches);
收率:
Array
(
[0] => Array
(
[0] => AV. RIVADAVIA 11440
[1] => AV. RIVADAVIA 11441
[2] => AV. RIVADAVIA 11442
[3] => AV. RIVADAVIA 11443
[4] => xxxxx
)
)
希望这会有所帮助:)
答案 1 :(得分:0)
您可以使用tempered greedy token获取所需内容:
Dirección:\s*((?:(?!Horario de atención:).)*)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
见regex demo,结果在第1组:
$re = '~Dirección:\s*((?:(?!Horario de atención:).)*)~u';
$str = "Dirección: CALLE 137 E/ 32 Y 32BIS\nDirección: AV. RIVADAVIA 11440 Horario de atención: 08:01 a 21:00 hs";
preg_match_all($re, $str, $matches);
print_r($matches[1]);
请参阅demo。
驯化的贪婪令牌(?:(?!Horario de atención:).)*
匹配除了开始子串Horario de atención:
的符号之外的所有内容。
答案 2 :(得分:0)
根据你的例子;你只需要在地址中查找作为限制器的邮政编码。例如
<?php
$strings = <<<EOF
Dirección: AV. RIVADAVIA 11440 Horario de atención: 08:01 a 21:00 hs
Dirección: AV. RIVADAVIA 11441 Horario de atención: 08:02 a 21:00 hs
Dirección: AV. RIVADAVIA 11442 Horario de atención: 08:03 a 21:00 hs
Dirección: AV. RIVADAVIA 11443 Horario de atención: 08:04 a 21:00 hs
Dirección: xxxxx Horario de atención: 08:05 a 21:00 hs
EOF;
preg_match_all('/Dirección:\s(.*\d{5})/', $strings, $matches);
print_r($matches);
数组中第2项的结果,以获得所需的数据:
Array
(
[0] => Array
(
[0] => Dirección: AV. RIVADAVIA 11440
[1] => Dirección: AV. RIVADAVIA 11441
[2] => Dirección: AV. RIVADAVIA 11442
[3] => Dirección: AV. RIVADAVIA 11443
)
[1] => Array
(
[0] => AV. RIVADAVIA 11440
[1] => AV. RIVADAVIA 11441
[2] => AV. RIVADAVIA 11442
[3] => AV. RIVADAVIA 11443
)
)