在下文中,我需要一个正则表达式来捕获<tagstart></tagstart>
请注意,这是不是 html。
* real time results: shows results as you type
* code hinting: roll over your expression to see info on specific elements
* detailed results: roll over a match to see details & view group info below
* built in regex guide: doub<tagstart>le click entries to insert them into your expression
* online & desktop: regexr.com or download the desktop version for Mac, Windows, or Linux
* save your expressions: My Saved expr</tagstart>essions are saved locally
* search Community expressions and add your own
由于
答案 0 :(得分:3)
编辑:正如@Kobi在评论中正确指出的那样,下面原帖的简单版本当然是:
<(tagstart)>(.*?)</\1>
由于原始版本也有效,所有其他陈述仍然有效,我会保留原样。
如果(且仅当)标签无法嵌套:
<(tagstart)>((?:(?!</\1>).)*)</\1>
说明:
<(tagstart)> # matches "<tagstart>" and stores "tagstart" in group 1
( # begin group 2
(?: # begin non-capturing group
(?! # begin negative look-ahead (... not followed by)
</\1> # a closing tag with the same name as group 1
) # end negative look-ahead
. # if ok, match the next character
)* # end non-capturing group, repeat
) # end group 2 (stores everything between the tags)
</\1> # a closing tag with the same name as group 1
正则表达式需要以“单行”模式应用(有时称为“dotall”模式)。或者您将.
替换为[\s\S]
。
要在任意两个同名的标记之间一般匹配文字,请使用<(\w+)>
代替<(tagstart)>
。
根据您的正则表达式风格,某些内容可能会有所不同,例如$1
代替\1
进行反向引用,或者需要额外转义的元字符。
查看Rubular demo。
答案 1 :(得分:2)
也许这个正则表达式:(\<tagstart\>)(.+)(\<\/tagstart\>)/s
会对你有帮助吗?第二场比赛将是你要搜索的。有关详细信息,请参阅demo。
答案 2 :(得分:1)
#!/usr/bin/perl -w
undef $/;
$_ = <>;
m|<(.*?)>(.*)</\1>|s;
print $2;
如果您确实只需要<tagstart>
,请将<(.*?)>
与<tagstart>
之类的内容替换为类似关闭。 undef $/
位允许您通过单次读取进行大量的啜食,$2
选择第二个匹配组。 s
和正则表达式的结尾要求.
与新行字符匹配。