PHP Regex Help для разбора строки - PullRequest
3 голосов
/ 30 июня 2010

У меня есть строка, такая как:

Are you looking for a quality real estate company? 

<s>Josh's real estate firm specializes in helping people find homes from          
[city][State].</s>

<s>Josh's real estate company is a boutique real estate firm serving clients 
locally.</s> 

In [city][state] I am sure you know how difficult it is
to find a great home, but we work closely with you to give you exactly 
what you need

Я бы хотел разделить этот параграф на массив, основанный на тегах <s> </s>, поэтому в результате я получу следующий массив:

[0] Are you looking for a quality real estate company?
[1] Josh's real estate firm 
    specializes in helping people find homes from [city][State].
[2] Josh's real estate company is a boutique real estate firm serving clients 
    locally.
[3] In [city][state] I am sure you know how difficult it is
    to find a great home, but we work closely with you to give you exactly 
    what you need

Это регулярное выражение, которое я сейчас использую:

$matches = array();
preg_match_all(":<s>(.*?)</s>:is", $string, $matches);
$result = $matches[1];
print_r($result);

Но этот возвращает только массив, содержащий текст, найденный между тегами <s> </s>, он игнорирует текст, найденный до и после этих тегов. (В приведенном выше примере он возвращает только элементы массива 1 и 2.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 30 июня 2010

Самое близкое, что я мог получить, это использовать preg_split() вместо:

$string = <<< STR
Are you looking for a quality real estate company? <s>Josh's real estate firm 
specializes in helping people find homes from [city][State].</s>
<s>Josh's real estate company is a boutique real estate firm serving clients 
locally.</s> In [city][state] I am sure you know how difficult it is
to find a great home, but we work closely with you to give you exactly 
what you need
STR;

print_r(preg_split(':</?s>:is', $string));

И получил этот вывод:

Array
(
    [0] => Are you looking for a quality real estate company? 
    [1] => Josh's real estate firm 
specializes in helping people find homes from [city][State].
    [2] => 

    [3] => Josh's real estate company is a boutique real estate firm serving clients 
locally.
    [4] =>  In [city][state] I am sure you know how difficult it is
to find a great home, but we work closely with you to give you exactly 
what you need
)

За исключением того, что создает дополнительный элемент массива (индекс 2), где между фрагментами [city][State].</s> и <s>Josh's real estate company.

есть новая строка.

Было бы тривиально добавить код для удаления пробельных совпадений, но я не уверен, что вы этого хотите.

1 голос
/ 30 июня 2010

Я предлагаю вам заглянуть в DOM http://php.net/manual/en/book.dom.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...