在perl 5中匹配除特定字符串之前的一个char之外的所有内容

时间:2013-12-05 16:30:26

标签: regex perl xml-parsing

我希望匹配从此开始的任何文本块

<eu:img

后面跟着

> 

接着是

"<bean:message key="

后面跟着任何东西

>

例如,我希望将此文字从 eu:img 匹配到 消息密钥=“ < / p>

<eu:img src="static/image/icons/erase12.png"
title="<bean:message key="attachedFile.delete.tooltip"/>"></eu:img>

但不是这个文字:

<eu:img src="static/image/icons/erase12.png" title="someTitle"></eu:img>
<link title="<bean:message key="attachedFile.delete.tooltip"/>"></link>

以下是我的尝试:

(?s)^<eu:img((?!.*?>).*.{1}?(\=\"<bean:message key\=\"))

Regular expression visualization

Debuggex Demo

1 个答案:

答案 0 :(得分:3)

试试这个:

/(<eu:img[^>]+<bean:message key=)/gs
OP的编辑:很好的答案,但不是我使用的正则表达式引擎的正确语法:Eclipse(我认为是Perl 5)。无论如何这都很好:

(?s)<eu:img[^>]+="<bean:message key="
  • <eu:img字面匹配字符<eu:img(区分大小写)
  • [^>]+匹配列表中不存在的单个字符(>) 量词:在一次和无限次之间,尽可能多次,根据需要回馈[贪心]
  • <bean:message key=字面匹配字符<bean:message key=(区分大小写)