我希望在 HTML 文件中获取标签之间的所有内容,如下所示a
:class
bc-de fg
<a class="bc-de fg"> XXXXXXXXXXXXX </a>
所以我写了下面的正则表达式:
$regexp = “<a\wclass="bc\wde">(.*?)<\/a>”
这行不通。我是正则表达式的新手,所以我正在努力进行更多练习。
如何更正此正则表达式?
尝试这个 :
$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);
尝试这个:
$regexp = '/<a class="bc-de fg">(.*)<\/a>/';
preg_match_all($regexp, $subject, $matches);
你的答案将在$matches
. 它应该适用于您刚才提到的场景。但如果是这种情况,如果属性顺序发生变化或分配了更多类,则此正则表达式将不起作用。最好的方法是使用 DOM 而不是使用正则表达式。
尝试[^(<a\W*class="bc\-de fg"\W*>)+(</a>)+]
您可以使用 not^
运算符。
尝试类似的东西$regex = ":<a class="bc-de fg">(.*?)</a>:mi";
:
所以我不必一直逃避正斜杠.
匹配除换行符 \r 和 \n 之外的任何单个字符。*?
重复上一项零次或多次。这是一个简单的备忘单,您可能会觉得有用。
regex
过度使用 html 或任何嵌套结构被认为是一种不好的做法。改为使用DOM
。
您在正则表达式中的问题是转义字符(将正则表达式字符串放在单引号之间)。而且您也没有开始和结束正则表达式字符(#...#
或\...\
)。