我觉得这应该是一个简单的'改变逗号',所以我做了我的研究并尝试了许多不同的东西,但似乎没有任何效果。首先是我用来尝试调试它的代码:
/* More code before */
$Test = "This is a test <ul>TEST</ul> Blabla";
$Real = $Data['chapters']['introduction'];
var_dump($Real);
echo "\n\n";
preg_match('/<ul>(.*)<\/ul>/', $Test, $VarTest);
var_dump($VarTest);
echo "\n\n";
preg_match('/<ul>(.*)<\/ul>/', $Real, $VarReal);
var_dump($VarReal);
结果如下:
string(1888) "<p>The <b>theory of relativity</b>, or simply <b>relativity</b>, generally encompasses two theories of <a href="http://en.wikipedia.org/wiki/Albert_Einstein" title="Albert Einstein">Albert Einstein</a>: <a href="http://en.wikipedia.org/wiki/Special_relativity" title="Special relativity">special relativity</a> and <a href="http://en.wikipedia.org/wiki/General_relativity" title="General relativity">general relativity</a>. Concepts introduced by the theories of relativity include:</p>
<ul>
<li>
<p>Measurements of various quantities are <i>relative</i> to the velocities of observers. In particular, space and time can <a href="http://en.wikipedia.org/wiki/Time_dilation" title="Time dilation">dilate</a>.</p>
</li>
<li>
<p><a href="http://en.wikipedia.org/wiki/Spacetime" title="Spacetime">Spacetime</a>: space and time should be considered together and in relation to each other.</p>
</li>
<li>
<p>The speed of light is nonetheless invariant, the same for all observers.</p>
</li>
</ul>
<p>The term "theory of relativity" was based on the expression "relative theory" (<a href="http://en.wikipedia.org/wiki/German_language" title="German language">German</a>: <span lang="de"><i>Relativtheorie</i></span>) used by <a href="http://en.wikipedia.org/wiki/Max_Planck" title="Max Planck">Max Planck</a> in 1906, who emphasized how the theory uses the <a href="http://en.wikipedia.org/wiki/Principle_of_relativity" title="Principle of relativity">principle of relativity</a>. In the discussion section of the same paper <a href="http://en.wikipedia.org/wiki/Alfred_Bucherer" title="Alfred Bucherer">Alfred Bucherer</a> used for the first time the expression "theory of relativity" (<a href="http://en.wikipedia.org/wiki/German_language" title="German language">German</a>: <span lang="de"><i>Relativitätstheorie</i></span>).</p>
"
array(2) {
[0]=>
string(13) "<ul>TEST</ul>"
[1]=>
string(4) "TEST"
}
array(0) {
}
有关为什么最后一个数组为空(当它应该包含3个列表元素时)的任何想法?
更多信息,它是从MySQL使用PDO检索的,我试过转义它(用于引号),替换引号,检查这个文本大小是否低于preg_match()字符串限制,我就是不能找到问题所在。我认为代码说明问题的具体位置,无论如何,我很乐意执行您需要的测试。感谢。
答案 0 :(得分:3)
您遇到的最大问题是您正在尝试使用正则表达式解析HTML代码。即使您可以使用您拥有的数据,只要数据包含嵌套的<ul>
标记,您的正则表达式就会爆炸,并且此时将使它变得非常困难。解析HTML真的应该使用DOM解析器(即PHP的DOMDocument类)来完成。正则表达式是这项工作的错误工具。
也就是说,如果必须使用正则表达式执行此操作,则需要使用s
修饰符,因为输入跨多行。此修饰符更改正则表达式中点字符的行为,以便它包含换行符。
所以你的最终模式需要看起来像这样:
preg_match('/<ul>(.*)<\/ul>/s', $Real, $VarReal);
希望有所帮助。
答案 1 :(得分:2)
第二种情况下你的正则表达式是多行的。在函数调用中附加“m”:
preg_match('/<ul>(.*)<\/ul>/m', $Real, $VarReal);
答案 2 :(得分:1)
我使用了修改一些SO答案的代码;但是我通过检查其他答案并看到Patrice Levesque的答案找到了解决方案。根据{{3}}:
,我在函数调用中使用's'preg_match('/<ul>(.*)<\/ul>/s', $Real, $VarReal);