1

我需要匹配它并从这些标签中提取值。问题是它们是动态生成的,并且有人决定在每次刷新页面时进行切换。

所以标签可能是这样的:

<input type="hidden" value="838218230" name="vstablepid_2717_1State">

或这个:

<input type="hidden" name="vstablepid_2717_1State" value="838218230" >

我可以分别做每一个,像这样:

value="(.+?)".*"vstable

有一种说法可以同时适用吗?


到目前为止的想法:

使用某种类型的可选语法,我可以说在值之前或之后找到“vstable”匹配项——但我仍然需要在线上找到至少一个“vstable”。

4

3 回答 3

2

使用前瞻断言vstable,然后获取您的内容(从组中):

<(?=[^>]*vstable[^>]*>)[^>]*value="(.*?)"[^>]*>

正则表达式的前瞻部分(?=...)要求vstable出现在下一个之前>

于 2012-05-23T00:29:40.267 回答
1

你不能or把这两个陈述放在一起吗?

(?:value="(.+?)".*"vstable)|(?:"vstable.*?value="(.+?)")

还是我错过了什么?

编辑:此方法有一个警告-有时该值会出现在第一个捕获组中,有时会出现在第二个捕获组中。在这方面,波希米亚人的回答(也)更好。

于 2012-05-23T00:26:25.670 回答
0

您当前的正则表达式:

value="(.+?)".*"vstable 

vstable正在执行之后发生的事实value

您可以简单地取出该部分并简单地让它成为:

value="(.+?)"  

对于大多数正则表达式编译器,.+?应该是非贪婪的,并且在到达结束引号时将停止匹配"。这样,无论value发生在哪里,都会被拾起。

但这取决于您的需要,以及您是否特别想value在发生的那一行选择vstable,但问题中没有指定,所以我给出了一个通用的答案。

于 2012-05-23T00:31:22.403 回答