我想使用两个正则表达式在以下字符串中获取oauth_token和oauth_token_secret的值。
Authorization: OAuth oauth_signature="QkLCQkI%3D", oauth_token="7410ac05e77e117d24ef98904344a3e6", oauth_token_secret="811ebaa48f432ffc070d5b7f4c8e6906"
使用下面的表达式我可以获得所有双引号值,但我无法找到如何仅提取oauth_token_secret或oauth_token。
"([^"]*)"
答案 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)?=")[^"]*(?=")