如何通过此HTML代码中的PHP preg_match正则表达式模式匹配主题:
<table border=0>
<tr>
<td>
<h2>subject</h2>
</td>
Run Code Online (Sandbox Code Playgroud)
所有的空格和换行都是故意留下的.所以问题是使用一些多线模式提取主题名称?
mat*_*fee 58
如果你正在寻找(例如)h2嵌套在td标签中的标签,其中两者之间只有空格,只需使用\s包含空格,换行符等的标签,例如::
preg_match('#<td>\s*<h2>(.*?)</h2>\s*</td>#i',$str,$matches);
// result is in $matches[1]
Run Code Online (Sandbox Code Playgroud)
在这里看到它.
为了您的兴趣,这里列出了您可以传递给preg_*函数的不同修饰符.您可能感兴趣的标志是:
s("dotall"):这个.匹配每个角色,包括换行符.所以,说你的<h2>.....</h2>分布在多条线上.然后你必须这样做
preg_match('#<td>\s*<h2>(.*?)</h2>\s*</td>#is',$str,$matches);
Run Code Online (Sandbox Code Playgroud)
为了.*超越多行(请参阅s正则表达式末尾的额外内容?).
m("多"):这一个只是让^和$比赛的开始/结束线,而不是仅仅的开始/结束的字符串.你,如果你只使用真的需要它^,并$在你的模式,并希望他们在您输入的每根线的开始/结束匹配.Sau*_*nez 13
您可以将m运算符添加到正则表达式:
// Given your HTML content.
$html = 'Your HTML content';
preg_match('/<td[^>]*>(.*?)<\/td>/im', $html, $matches);
Run Code Online (Sandbox Code Playgroud)
哈希,希望这(仍然)有所帮助.
非常简单地与
preg_match('/<h2>(.*?)<\\/h2>/', $str, $matches);
print($matches[1]);
Run Code Online (Sandbox Code Playgroud)
多行格式对正则表达式没有影响,除非您需要匹配跨多行的字符串。