正则表达式匹配除一个单词之外的所有内容

发布于 2025-01-03 00:42:53 字数 479 浏览 0 评论 0原文

我正在尝试捕获以下模式“除了数据额外的所有内容”

这是搜索字符串:

<li data-extra="star" class = "result">a</li>
<li class = "result">b</li>
<li class = "result">c</li>
<li data-extra="star" class = "result">d</li>
<li class = "result">e</li>

我只想匹配 b、c 和 e(没有数据额外的那些)

我已经做了类似的事情,

<li(?!(data\-extra))class="result"(.*?)>

但是这个不起作用(php preg_match_all 结果为 0)

I'm trying to capture the following pattern "everything except data-extra"

Here is the search string :

<li data-extra="star" class = "result">a</li>
<li class = "result">b</li>
<li class = "result">c</li>
<li data-extra="star" class = "result">d</li>
<li class = "result">e</li>

And I would like to match only b, c and e (those without data-extra)

I've done something like this

<li(?!(data\-extra))class="result"(.*?)>

but this doesn't work (0 result with php preg_match_all)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

甜尕妞 2025-01-10 00:42:53

使用 xpath_match_all

$results = xpath_match_all('//li[not(@data-extra)]', $htmlString);

如果您还想显式包含该类,请更改XPath

//li[not(@data-extra) and @class="result"]

$results 变量将包含innerHTML和找到的节点的outerHTML。

Use xpath_match_all and

$results = xpath_match_all('//li[not(@data-extra)]', $htmlString);

If you want to explicitly include the class as well, change the XPath to

//li[not(@data-extra) and @class="result"]

The $results variable will contain the innerHTML and outerHTML of the found nodes.

爱格式化 2025-01-10 00:42:53

我认为您错过了正则表达式中的空格。这里有一个 .NET 正则表达式:

\s+!(data-extra).+>(.+)</li>

I think you missed the whitespaces in your regexp. Here comes one as .NET regexp:

\s+!(data-extra).+>(.+)</li>
时常饿 2025-01-10 00:42:53

这:

<li ([^data\-extra]).+>

似乎有效 - 尽管我只在这里测试过 - http://regexpal.com/ 但不一定反对 php。

不过,很可能有一种更清洁的方法来做到这一点。

This:

<li ([^data\-extra]).+>

seems to work - though I've only tested it here - http://regexpal.com/ and not necessarily against php.

There may well be a cleaner way to do it though.

停滞 2025-01-10 00:42:53

这是一种使用正则表达式的方法,尽管 HTML 解析器通常是一个更好的主意:

<?php
  $a = '<li data-extra="star" class = "result">a</li>
  <li class = "result">b</li>
  <li class = "result">c</li>
  <li data-extra="star" class = "result">d</li>
  <li class = "result">e</li>';

  preg_match_all('/<li(([^>])(?<!data\-extra))*>(.*)<\/li>/', $a, $m);
  print_r($m[0]);
?>

This is a way that uses regex, although an HTML parser is generally a better idea:

<?php
  $a = '<li data-extra="star" class = "result">a</li>
  <li class = "result">b</li>
  <li class = "result">c</li>
  <li data-extra="star" class = "result">d</li>
  <li class = "result">e</li>';

  preg_match_all('/<li(([^>])(?<!data\-extra))*>(.*)<\/li>/', $a, $m);
  print_r($m[0]);
?>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文