(ruby)帮助匹配我的正则表达式

时间:2009-11-27 06:12:18

标签: ruby regex

我正在尝试匹配以下HTML代码段的值:

<input name="example" type="hidden" value="matchTextHere" />

以下内容:

x = response.match(/<input name="example" type="hidden" value="^.+$" \/>/)[0]

为什么这不起作用?它与'matchTextHere'不匹配

修改

当我使用时:

x = response.match(/<input name="example" type="hidden" value="(.+)" \/>/)[0]

它匹配整个html元素,而不仅仅是值'matchTextHere'

4 个答案:

答案 0 :(得分:3)

^匹配一行的开头,$匹配该行的结尾。将^.+$更改为\w+,它将适用于不包含任何符号的值。将其设为括号组以捕获值 - (\w+)

更新:匹配引号之间的任何内容(假设值中没有引号),请使用[^"]+。如果值中有转义引号,那么它就是一个不同的球赛。 .+在这种情况下会起作用,但由于回溯,它会变慢。 .+首先匹配字符串的结尾(因为.甚至匹配"),然后查找"并失败。然后它返回一个位置并查找"并再次失败 - 依此类推,直到找到" - 如果在value之后还有一个属性,那么您将获得{ {1}}作为匹配。

matchTextHere" nextAttr="something

话虽如此,如果任何属性值之间有额外的空格,正则表达式将失败。使用正则表达式解析html并不是一个好主意 - 如果必须使用正则表达式,则可以使用x = response.match(/<input name="example" type="hidden" value="([^"]+)" \/>/)[1]

允许额外的空格
\s+

答案 1 :(得分:0)

因为您的正则表达式中包含行首标记(^)和行尾标记($)。我认为您打算捕获价值,这可能会解决您的问题:value="(.+?)"

请注意,使用正则表达式处理html不是一个好主意,它甚至可以drive you crazy。最好改为使用html parser

答案 2 :(得分:0)

您不需要^和$:

x = response.match(/<input name="example" type="hidden" value=".+" \/>/)[0]

答案 3 :(得分:0)

你只需要将[0]更改为[1]

response='<input name="example" type="hidden" value="matchTextHere" />'

puts response.match(/<input name="example" type="hidden" value="(.*?)" \/>/)[1]

matchTextHere
相关问题