-2

我希望在 HTML 文件中获取标签之间的所有内容,如下所示aclass bc-de fg

<a class="bc-de fg"> XXXXXXXXXXXXX </a>

所以我写了下面的正则表达式:

$regexp = “&lt;a\wclass="bc\wde">(.*?)<\/a>”

这行不通。我是正则表达式的新手,所以我正在努力进行更多练习。

如何更正此正则表达式?

4

5 回答 5

0

尝试这个 :

$str  = '<a class="bc-de fg">Testing</a>';

preg_match('/<a class="bc\-de\s*fg">(?P<link>.*)<\/a>/',$str,$matches);

echo "<pre>";
print_r($matches);

您将获得链接$link = $matches['link'];

这将为您提供更准确的结果:

preg_match('/<a.*class="bc\-de\s*fg".*>\s*(?P<link>.*)\s*<\/a>/',$str,$matches);

于 2013-03-07T07:30:48.917 回答
0

尝试这个:

$regexp = '/<a class="bc-de fg">(.*)<\/a>/';
preg_match_all($regexp, $subject, $matches);

你的答案将在$matches. 它应该适用于您刚才提到的场景。但如果是这种情况,如果属性顺序发生变化或分配了更多类,则此正则表达式将不起作用。最好的方法是使用 DOM 而不是使用正则表达式。

于 2013-03-07T07:30:54.333 回答
0

尝试[^(<a\W*class="bc\-de fg"\W*>)+(</a>)+]您可以使用 not^运算符。

于 2013-03-07T07:32:11.683 回答
0

尝试类似的东西$regex = ":<a class="bc-de fg">(.*?)</a>:mi";

  • 我使用了分隔符:所以我不必一直逃避正斜杠
  • .匹配除换行符 \r 和 \n 之外的任何单个字符。
  • *?重复上一项零次或多次。

这是一个简单的备忘单,您可能会觉得有用。

于 2013-03-07T07:27:48.850 回答
0

regex过度使用 html 或任何嵌套结构被认为是一种不好的做法。改为使用DOM

您在正则表达式中的问题是转义字符(将正则表达式字符串放在单引号之间)。而且您也没有开始和结束正则表达式字符(#...#\...\)。

于 2013-03-07T07:28:59.560 回答