Regex (PHP): избегайте записи определенного списка слов - PullRequest
0 голосов
/ 01 июня 2018

Если мы возьмем текст как этот

 <p>Portable <span class="shlt">Adobe</span> <span class="shlt">After</span>
 <span class="shlt">Effects</span> CC <span class="shlt">2018</span> 15.1.1.12 (x64)</p>

Есть слова между этими <span class="shlt"></span> тегами.Мне нужно захватить только заголовок!

(Вы можете ясно видеть, что он содержит Portable Adobe After Effects CC 2018 15.1.1.12 (x64) )

Возможно ли эточтобы избежать захвата деталей <span class="shlt"> и </span>?

и захвата только текста Portable Adobe After Effects CC 2018 15.1.1.12 (x64) Текст?

То, что я сейчас пытаюсь сделать, это захват слов между этими тегами.Есть ли способ лучше!Пример кода регулярного выражения будет полезен.В PHP Пожалуйста ...

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Вместо использования регулярного выражения вы можете использовать DOMDocument и использовать getElementsByTagName , чтобы найти элемент <p>.

Затем взять первое совпадение из результатаи получите textContent :

$dom = new DOMDocument();
$dom->loadHTML($data);
echo $dom->getElementsByTagName("p")[0]->textContent;

, который даст вам:

Portable Adobe After Effects CC 2018 15.1.1.12 (x64)
0 голосов
/ 01 июня 2018

Вы можете захватывать группы внутри регулярного выражения, используя ().Затем вы можете разобрать массив.
Вот пример.

$re = '/\<span class="shlt">([^<]*)<\/span>/m';
$str = 'Portable <span class="shlt">Adobe</span> <span 
class="shlt">After</span> <span class="shlt">Effects</span> CC <span 
class="shlt">2018</span> 15.1.1.12 (x64)';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);

это удалит теги span

$str = 'Portable <span class="shlt">Adobe</span> <span 
class="shlt">After</span> <span class="shlt">Effects</span> CC <span 
class="shlt">2018</span> 15.1.1.12 (x64)';

preg_replace("/<\/?span[^>]*>/", "", $str);
echo $str;
...