Regex(PHP): Avoid Capturing a certain word list

Regex(PHP): Avoid Capturing a certain word list

如果我们采用这样的文本

 <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 Adob​​e After Effects CC 2018 15.1.1.12 (x64))

是否可以避免捕获 <span class="shlt"></span> 部分?

并且仅捕获 Portable Adob​​e After Effects CC 2018 15.1.1.12 (x64) 文本?

我目前正在尝试做的是捕获这些标签之间的单词。有没有更好的办法!示例正则表达式代码将很有用。在PHP请...

您可以使用 () 在正则表达式中捕获组。然后就可以解析出数组了。
这是一个例子。

$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;

您可以使用 DOMDocument and use 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)