2010-06-15 132 views
4

正则表达式会从此原始标记返回'details.jsp'(不含引号!)会怎样?我可以很容易地匹配value =“details.jsp”的所有内容,但是在匹配属性内的内容时遇到了麻烦。正则表达式匹配属性值

<s:include value="details.jsp" />

任何帮助非常感谢!

感谢

劳伦斯

+6

不要使用REGEX来解析XML/HTML。为此使用XML解析器。其次,你可以发布你的正则表达式不起作用吗? – ircmaxell 2010-06-15 15:05:36

+0

看到相关答案: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – huitseeker 2010-07-07 10:40:34

回答

5

/value=["']([^'"]+)/将使 “details.jsp” 第一个捕获小组。

编辑:

针对ircmaxell的评论,如果你真的需要它,下面的表达式更加灵活:

/value=(['"])(.+)\1/

它会匹配<s:include value="something['else']">的事情,但只要注意该值将被放置在第二个捕获组中。

但正如前面提到的,正则表达式不是你想用于解析XML的东西(除非它是一个非常简单的情况),所以当你应该使用解析器时,不要花费太多时间在复杂的正则表达式上。

+0

我认为你需要添加一个'[“ ']''' – 2010-06-15 15:06:15

+1

虽然不会因为添加它而伤害,但是[['']'不需要,因为'[['''] +)'匹配(并捕获)所有字符直到' ''或'''然后停下来,它会匹配upto但不包括结尾报价。 – mikej 2010-06-15 15:08:14

+0

这是完全有效的XML,但是正则表达式只会捕获某些东西['。你需要一个反向引用来区分... – ircmaxell 2010-06-15 15:15:31