正则表达式:如何捕获第二个和第三个双引号值

时间:2014-03-12 16:30:03

标签: regex

我想使用两个正则表达式在以下字符串中获取oauth_token和oauth_token_secret的值。

Authorization: OAuth oauth_signature="QkLCQkI%3D", oauth_token="7410ac05e77e117d24ef98904344a3e6", oauth_token_secret="811ebaa48f432ffc070d5b7f4c8e6906"

使用下面的表达式我可以获得所有双引号值,但我无法找到如何仅提取oauth_token_secret或oauth_token。

"([^"]*)"

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是:

oauth_token(?:_secret)?="([^"]*)"

这只会匹配前面加oauth_token=oauth_token_secret=的引用字符串。第一个捕获组将包含引号内的值。如果值的顺序可能不同,这尤其有用。

或者,如果您选择的正则表达式引擎支持后视,您可以使用:

(?<=oauth_token(?:_secret)?=)"([^"]*)"

这与前一个模式的工作原理相同,但不会捕获值前面的名称。仍会捕获值周围的引号。如果您希望将这些内容排除在外,您也需要预先考虑:

(?<=oauth_token(?:_secret)?=")[^"]*(?=")

最后,请注意,这可能会匹配foo_oauth_token="bar"之类的值。如果您需要在oauth_token / oauth_token_secret之前排除任何其他单词字符的序列,请在\b前面放置oath

\boauth_token(?:_secret)?="([^"]*)"

(?<=\boauth_token(?:_secret)?=")[^"]*(?=")