正则表达式排除字符串标记之间的字符

时间:2014-07-02 15:45:45

标签: php html-parsing

所以我有一个字符串,我想使用正则表达式搜索,而不是像domDocument等任何其他方法。

示例:

<div class="form-item form-type-textarea form-item-answer2">
<div class="form-textarea-wrapper resizable"><textarea id="edit-answer2" name="answer2" cols="60" rows="5" class="form-textarea">
this is some text
</textarea>
</div>
</div>

所需:

this is some text

所以我想要做的就是使用1个正则表达式行留下&#39;这是一些文本&#39;,这是不固定的并且是动态的。然后我将通过preg_replace传递它以获得所需的结果。

当前的正则表达式

div class="form-item.*class="form-textarea">$\A<\/textarea>.*<\/div>/gU

我尝试过使用字符串结尾和字符串锚点的开头,但无济于事。

2 个答案:

答案 0 :(得分:0)

不要用正则表达式解析HTML。使用DOM解析器:

$doc = new DOMDocument();
$doc->loadHTML($html);

$textarea = $doc->getElementById("edit-answer2");    
echo $textarea->nodeValue;

如果要修改值:

$textarea->nodeValue = "foo bar";
$html = $doc->saveHTML();

答案 1 :(得分:0)

你的正则表达式是,

/<textarea id[^>]*>\n([^\n]*)/gs

DEMO

OR

/<textarea id[^>]*>(.*?)(?=<\/textarea>)/gs

DEMO

捕获的group1包含字符串this is some text

OR

您可以使用以下正则表达式仅匹配字符串this is some text

/div class="form-item.*class="form-textarea">[^\n]*\n\K[^\n]*/s

DEMO