我正在尝试匹配HTML源代码中的特定span-tag。
lang-attribute和标签的内部HTML用作返回新字符串的函数的参数。
我想用被调用函数的结果替换旧标签,属性和内容。
主题将是这样的:
<p>Some codesnippet:</p>
<span lang="fsharp">// PE001
let p001 = [0..999]
|> List.filter (fun n -> n % 3 = 0 || n % 5 = 0)
|> List.sum
</span>
<p>Another code snippet:</p>
<span lang="C#">//C# testclass
class MyClass {
}
</span>
为了提取lang属性和内容的值,我使用以下表达式对这些值进行分组:
/(<span lang="(.*)">(.*)</span>)/is
由于正则表达式趋于贪婪,因此该表达式与完整主题匹配,而不仅仅是一个span-tag及其内容。
如何设置只匹配一个span-tag?
答案 0 :(得分:5)
我们永远不会再次重新评估:不要使用正则表达式来处理HTML!
相反,请使用DOMDocument::loadHTML
。
它允许您使用DOM操纵HTML数据,这更强大,更容易:您将能够:
getElementById
和getElementsByTagName
等方法进行简单的提取,DOMXPath
类对文档进行XPath查询DOMElement
和getAttribute
/ setAttribute
真的:花点时间学习DOM:这是一项很好的投资!
答案 1 :(得分:1)
您可以使用?
/(<span lang="(.*?)">(.*?)<\/span>)/is
或默认情况下使用PCRE_UNGREEDY modifier
使所有表达无效 /(<span lang="(.*)">(.*)<\/span>)/Uis
答案 2 :(得分:1)
只需添加?,我认为
/(<span lang="(.*?)">(.*?)</span>)/is