Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式难度_Php_Regex - Fatal编程技术网

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);