PHP正则表达式难度
当文本之间有空格和回车时,我很难进行正则表达式 例如,在下面的示例中,如何使正则表达式获得“PHP正则表达式难度,php,regex,Php,Regex,当文本之间有空格和回车时,我很难进行正则表达式 例如,在下面的示例中,如何使正则表达式获得“” 我试过了 id="content">(.*?)<SCRIPT 查看PCRE修饰符: 您可以应用s修饰符,如”/id=“content”>(.*)((.\n)*?)试试看 id=“content”>(((?:.|\n)*?)另一个不带正则表达式的解决方案: $start = 'id="content">'; $end = '<SCRIPT'; if (($startPos
”
我试过了
id="content">(.*?)<SCRIPT
查看PCRE修饰符: 您可以应用s修饰符,如
”/id=“content”>(.*)((.\n)*?)试试看
id=“content”>(((?:.|\n)*?)另一个不带正则表达式的解决方案:
$start = 'id="content">';
$end = '<SCRIPT';
if (($startPos = strpos($str, $start)) !== false &&
($endPos = strpos($str, $end, $startPos+1)) !== false) {
$substr = substr($str, $startPos, $endPost-$startPos);
}
$start='id=“content”>;
$end='好吧,这是一个多行问题,所以请看一下模式修饰符:
m(PCRE\u多行)默认情况下,PCRE
将主题字符串视为
由单个“线”组成
字符(即使它实际上
包含多个换行符)。“开始”
第行的“元字符(^)匹配
仅在字符串的开头,而
“行尾”元字符($)
仅在字符串末尾匹配,
或在终止换行之前
(除非设置了D修饰符)。这是
与Perl相同
设置此修改器后,“开始”
“线的长度”和“线的末端”构造
紧接着或
就在
主题字符串,以及
从一开始到结束。这是
相当于Perl的/m修饰符。如果
列表中没有“\n”字符
主题字符串,或不出现^
或模式中的$,设置此
修改器没有效果
s(PCRE\u DOTALL)如果此修饰符为
集合中的点元字符
模式匹配所有字符,
包括新线。没有它,
不包括换行符。这个修饰语
相当于Perl的/s修饰符。A.
负类,例如[^a]始终
匹配换行符,
独立于此设置
修饰语
从
XPath非常强大
PS我相信(我希望)上述代码可以收紧一些
$dom = new DOMDocument();
$dom->strictErrorChecking = false;
$dom->loadHTML($html_str);
$xpath = new DOMXPath($dom);
$div = $xpath->query('div[@id="content"]')->item(0);
请更正我的xpath表达式-不确定它是否有效…你所说的“所有文本”是什么意思?我将发布一个强制性链接,指向为什么不使用正则表达式解析HTML,然后继续。谢谢,我不担心这种情况下的嵌套标记,所以它应该可以工作这里有一个关于用PHP解析HTML的讨论。你想要/s不是/m/s改变点的行为/m更改^和$。“s(PCRE_DOTALL)如果设置了此修饰符,则模式中的点元字符将匹配所有字符,包括换行符。没有它,换行符将被排除。”schwern,您能解释一下吗?那就是/id=“content”>(*)我也会使用不区分大小写的“I”,因为你可以写,等等……那么,如果我想同时做这两件事,我会在末尾添加/is吗?好主意,我没想到
(?<=id="content">)(?:.|\n)*?(?=<SCRIPT)
$start = 'id="content">';
$end = '<SCRIPT';
if (($startPos = strpos($str, $start)) !== false &&
($endPos = strpos($str, $end, $startPos+1)) !== false) {
$substr = substr($str, $startPos, $endPost-$startPos);
}
$s = '<div id="content">
<div id="contentleft"> <SCRIPT language=JavaScript>';
if( preg_match('/id="content">(.*?)<SCRIPT/s', $s, $matches) )
print $matches[1]."\n";
$s = '<div id="content">
<div id="contentleft"> <SCRIPT language=JavaScript>';
// Load the HTML
$doc = new DOMDocument();
$doc->loadHTML($s);
// Use XPath to find the <div id="content"> tag's descendants.
$xpath = new DOMXPath($doc);
$entries = $xpath->query("//div[@id='content']/descendant::*");
foreach( $nodes as $node ) {
// Stop when we see <script ...>
if( $node->nodeName == "script" )
break;
// do what you want with the content
}
$dom = new DOMDocument();
$dom->strictErrorChecking = false;
$dom->loadHTML($html_str);
$xpath = new DOMXPath($dom);
$div = $xpath->query('div[@id="content"]')->item(0);