如何检索“_id =”和“&”之间的数据?

时间:2009-09-19 20:27:57

标签: regex

如何解析文件中的字符串“7c23a12f0cffa6cf2fac0baf8eacf4c1”..我正在尝试检索_id=&之间的数据

示例文件:

4593733f4ab534f0001ecbe20000b3e9/cgi-bin/rsspipes/dispatch?Alternative=10&Category=ECMINSTITUTE&Type=News&_action=run&_id=7c23a12f0cffa6cf2fac0baf8eacf4c1&_out=json&_render=json&_time=&dojo_preventCache=1253389550099Z1f8wengine.pipes.yahoo.com:8080rhttp://ecminstitute.appspot.com/gMozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; en) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.910jdmm6t5aneif&b=4&d=zhJNm4hpYEL50eT2b_Zabr3mZKV2C34ShzuA1A--&s=qm&i=.a0EUfWk9n2pue72QqA3

5 个答案:

答案 0 :(得分:4)

id=([^&]*)&

id =和&之间的数据将由第一个(也是唯一的)组匹配,然后可以通过.group(1)或类似的方式访问,具体取决于语言/正则表达式库。

修改:根据JohannesRössel的建议,将+更改为*

答案 1 :(得分:3)

使用像这样的正则表达式:

_id=([a-f0-9]+)&

括号定义了一个可以从结果中检索的组。

答案 2 :(得分:3)

这比一些替代方案更强大。

[&?]_id=([a-f0-9]+)(?:[&]|$)
[&?] # makes sure it isn't part of another parameter
_id=
(
  [a-f0-9]+ # at least one hexadecimal digit
)
(?:
  [&] # make sure there isn't some trailing data
|
  $   # might be at the end of the string
)

答案 3 :(得分:0)

我用

perl -ne 'm/[&?]_id=([^&]+)(&|$)/ && print $1;' [file]

其中[file]是包含数据的文件的名称。

答案 4 :(得分:0)

我使用以下(非贪婪)Perl正则表达式:

/_id=(.*?)&/