在单词之间获取字符串,并且一个单词是可选的

时间:2015-12-25 03:17:19

标签: php regex

我有很多这样的字符串:

"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"

如何从字符串中获取地址?

3 个答案:

答案 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
        )

)