用正则表达式匹配两个标签之间的所有内容? [英] Match everything inbetween two tags with Regular Expressions?

查看:919
本文介绍了用正则表达式匹配两个标签之间的所有内容?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何匹配(PCRE)两个标签之间的所有内容?



我试过这样的事情:


<! - \s * LoginStart \s * - >(。*)<! - \s * LoginEnd \s * - >


但它对我来说效果不太好。



I对于正则表达式来说,这是一种新的方式,所以我希望如果有人愿意向我解释如何使用正则表达式来实现这一点。



感谢

解决方案

  $ string ='<! -  LoginStart  - > ;< div id =stuff> text< / div><! -  LoginEnds  - >'; 
$ regex ='#<! - \s * LoginStart \s * - >(。*?)<! - \s * LoginEnds \s * - > #秒;

preg_match($ regex,$ string,$ matches);

print_r($ matches); // $ matches [1] =< div id =stuff> text< / div>

解释:

 (。*?)=非贪婪匹配(匹配第一个<! -  LoginEnds  - >它在$ regex中找到
s = modifier(变量的结尾)允许多行匹配
,例如'<! - LoginStart - >
more stuff
<! - LoginEnds - >'
pre>

How can I match (PCRE) everything inbetween two tags?

I tried something like this:

<!--\s*LoginStart\s*-->(.*)<!--\s*LoginEnd\s*-->

But it didn't work out too well for me..

I'm kind of new to regular expressions, so I was hoping if someone would be kind enough to explain to me how I would accomplish this, if its even possible with regular expressions.

Thanks

解决方案

$string = '<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->';
$regex = '#<!--\s*LoginStart\s*-->(.*?)<!--\s*LoginEnds\s*-->#s';

preg_match($regex, $string, $matches);

print_r($matches); // $matches[1] = <div id="stuff">text</div>

explanations:

(.*?) = non greedy match (match the first <!-- LoginEnds --> it finds
    s = modifier in $regex (end of the variable) allows multiline matches
        such as '<!-- LoginStart -->stuff
                 more stuff
                 <!-- LoginEnds -->'

这篇关于用正则表达式匹配两个标签之间的所有内容?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆