【问题标题】:Regex(PHP): Avoid Capturing a certain word list正则表达式(PHP):避免捕获某个单词列表
【发布时间】:2018-06-01 16:34:15
【问题描述】:

如果我们采用这样的文本

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

&lt;span class="shlt"&gt;&lt;/span&gt; 标签之间有单词。我只需要捕获标题!

(您可以清楚地看到它包含Portable Adob​​e After Effects CC 2018 15.1.1.12 (x64)

是否可以避免捕获&lt;span class="shlt"&gt;&lt;/span&gt; 部分?

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

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

【问题讨论】:

标签: php regex pcre


【解决方案1】:

您可以使用DOMDocumentgetElementsByTagName 来查找您的&lt;p&gt; 元素,而不是使用正则表达式。

然后从结果中取出第一个匹配,得到textContent

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

这会给你:

Portable Adobe After Effects CC 2018 15.1.1.12 (x64)

【讨论】:

  • 它不也提供那些跨度标签。而且我没有我需要的文档文件。我只是使用 cURL 来获取它...
  • 根据docs,这会返回The text content of this node and its descendants.
  • 但是如果我使用 cURL,我该如何使用它呢??
  • 然后将 curl 请求中的 html 加载到 DOMDocument 中。当响应是更复杂的结构时,您可以使用DOMXPath 并使用query 创建一个xpath 表达式。
【解决方案2】:

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

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

这将删除跨度标签

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

【讨论】:

  • 好的,但是那些其他的词呢。不在span标签中的词
  • \([^([^
  • 不,伙计,这不是我需要的。那些跨度标签并不总是这样。它们每次都不同。所以有时这可能会返回错误的输出。而且它不会一直返回相似的输出。我需要捕获除那些跨度标签之外的所有其他内容
  • 您可以根据需要将其复杂化。我没有编写完美正则表达式的所有案例,但这会让你到达那里。
  • 也许您可以使用正则表达式删除跨度标签?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 2021-12-14
相关资源
最近更新 更多