如何在此HTML代码中通过PHP preg_match正则表达式模式匹配 subject :
<table border=0>
<tr>
<td>
<h2>subject</h2>
</td>
所有空格和换行都是故意留下的。所以问题在于使用多线模式提取主题名称?
答案 0 :(得分:54)
如果您正在寻找(例如)h2
标记嵌套在 td
标记内的,其中两者之间只有空格,只需使用{{1}其中包括空格,换行符等,例如::
\s
在行动here中查看。
为了您的兴趣,here是您可以传递给preg_match('#<td>\s*<h2>(.*?)</h2>\s*</td>#i',$str,$matches);
// result is in $matches[1]
函数的不同修饰符的列表。您可能感兴趣的标志是:
preg_*
(“dotall”):这个s
匹配每个字符,包括换行符。所以,说你的.
分布在多行上。然后你必须做
<h2>.....</h2>
让preg_match('#<td>\s*<h2>(.*?)</h2>\s*</td>#is',$str,$matches);
遍历多行(请参阅正则表达式末尾的额外.*
)。
s
(“multiline”):这个只允许m
和^
匹配行的开头/结尾而不仅仅是开头/结尾字符串。如果您在模式中使用$
和^
并希望它们与输入中每条单独行的开头/结尾相匹配,那么您才真正需要它。答案 1 :(得分:13)
您可以将m
运算符添加到正则表达式中:
// Given your HTML content.
$html = 'Your HTML content';
preg_match('/<td[^>]*>(.*?)<\/td>/im', $html, $matches);
希望这(仍然)有所帮助,哈哈哈。
答案 2 :(得分:3)
非常简单
preg_match('/<h2>(.*?)<\\/h2>/', $str, $matches);
print($matches[1]);
除非您需要匹配跨越多行的字符串,否则多行格式对正则表达式没有影响。
答案 3 :(得分:1)
你不应该使用正则表达式来解析html。如果您无法控制用户可以输入的内容,则可能会导致很多问题。每种语言都有很多更好的解决方案。在大多数情况下,XML解析器做得更好。查看DOMDocument,simplehtmldom或php-html-parser
在此处查看更多答案为什么您不应该在html上使用正则表达式: RegEx match open tags except XHTML self-contained tags
答案 4 :(得分:0)
捕获由4个四个反引号分隔的代码块(作为markdown语法)。
示例易于修改。
<?php
$str = '
# Some Text
````
h5 {
font-size: 1rem;
font-weight: 600;
}
````
And some text.
';
$reg = '/````[^>]*(.*?)````/';
preg_match($reg, $str, $matches);
echo $matches[0];
/* OUTPUT
````
h5 {
font-size: 1rem;
font-weight: 600;
}
````
*/
echo preg_replace($reg, "DELETED", $str);
/* OUTPUT
# Some Text
DELETED
And some text.
*/
答案 5 :(得分:-4)
您必须使用正则表达式中的\s
删除所有换行符。
$str ="<ol>
<li>Capable for unlimited product</li>
<li>Two currency support</li>
<li>Works with touch screens and click screen based systems</li>
<li>Responsive design <b>shopping cart</b>, Specially design for Mac, iPhone, iPad, PC and Android</li>
<li>VAT for countries that support a Value Added Tax</li>
<li>Barcode scanner checkout option for POS</li>
<li>mRSS</li>
</ol>";
preg_match("/^([A-Za-z0-9\s\<\>\.\,\/\-\ ]+)$/",$str);
//Sanitize your code before save to database.
function test_input($data) {
$data = trim($data);
$data = htmlspecialchars($data);
$data = json_encode($data);
$data = addslashes($data);
return $data;
}
echo test_input($str);