Сопоставление двух разделов одинаковое количество раз - PullRequest
1 голос
/ 30 декабря 2010

Я ищу код для разбора следующего:

некоторый текстовый текст

Мне нужно удалить ненужные <span> вхождения, чтобы вывести:

sometexttext

Я написал регулярное выражение, которое делает это один раз:

/ [^ <] *</SPAN> / i

Как я могу сделать эту работу столько же разна обоих <span> и </span>?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2010
$result = preg_replace(
    '%(?<=<span>)        # Assert that there is a directly preceding span tag
    <span>               # Match a span tag
    ((?:(?!</?span>).)*) # Match the contents of the tag only if they do not include another span tag
    </span>              # Match a closing span tag
    (?=</span>)          # Assert that there is a directly following span tag
    %six', 
    '\1', $subject);

будет работать на вашем примере, но его нужно применять дважды, потому что он удаляет один «слой» вложенных span тегов за итерацию.

Итак, с произвольно вложенными тегами вам нужно будет вызывать это один раз для каждого уровня вложенности.

0 голосов
/ 30 декабря 2010

Вы можете попытаться увидеть, следует ли за <span> непосредственно другое <span> и его совпадению </span> непосредственно предшествует другое </span>.

Но вы не можете сказать, что этот промежуток будет бесполезным, поскольку к этим конкретным промежуткам можно добавить разметку.Если разметки нет, последние оставшиеся участки также бесполезны и также могут быть удалены.

...