【背景】
折腾:
期间,需要对于:
bdPass.api.params.login_token='eba6a0434994bd6b1841386f639929cf';
去提取出:
eba6a0434994bd6b1841386f639929cf |
所以需要用用到go语言的正则去提取。
【折腾过程】
1.官网解释:
2.参考:
去试试。
然后其中go的正则的语法,参考:
http://code.google.com/p/re2/wiki/Syntax
去用:
//bdPass.api.params.login_token='278623fc5463aa25b0189ddd34165592'; //use regex to extract login_token loginTokenP, _ := regexp.Compile(`bdPass\.api\.params\.login_token='(?P<loginToken>\w+)';`) loginToken := loginTokenP.FindString(getApiRespHtml); gLogger.Info("loginToken=%s", loginToken);
结果输出的是全部匹配的内容:
loginToken=bdPass.api.params.login_token=’122f1d7272bc7801c08542131d28dffb’; |
3.所以,再去看看如何获得group中的内容。
再参考:
看到是用FindAllStringSubmatch
再去看看语法:
http://golang.org/pkg/regexp/#Regexp.FindAllStringSubmatch
但是看着感觉很不好用。
是不是需要找个非All版本的SubMatch?
4.也看到另外一个:
http://golang.org/pkg/regexp/#Regexp.FindStringSubmatchIndex
和:
http://golang.org/pkg/regexp/#Regexp.FindSubmatch
另外再参考:
去试试:FindStringSubmatch
用代码:
//bdPass.api.params.login_token='278623fc5463aa25b0189ddd34165592'; //use regex to extract login_token loginTokenP, _ := regexp.Compile(`bdPass\.api\.params\.login_token='(?P<loginToken>\w+)';`) //loginToken := loginTokenP.FindString(getApiRespHtml); //loginToken := loginTokenP.FindSubmatch(getApiRespHtml); loginToken := loginTokenP.FindStringSubmatch(getApiRespHtml); gLogger.Info("loginToken=%s", loginToken);
输出结果是:
loginToken=[bdPass.api.params.login_token=’89287333cba4a6225713c0a9544b5d40′; 89287333cba4a6225713c0a9544b5d40] |
5.最终,是通过如下代码:
//bdPass.api.params.login_token='278623fc5463aa25b0189ddd34165592'; //use regex to extract login_token loginTokenP, _ := regexp.Compile(`bdPass\.api\.params\.login_token='(?P<loginToken>\w+)';`) //loginToken := loginTokenP.FindString(getApiRespHtml); //loginToken := loginTokenP.FindSubmatch(getApiRespHtml); foundLoginToken := loginTokenP.FindStringSubmatch(getApiRespHtml); gLogger.Debug("foundLoginToken=%s", foundLoginToken); if nil != foundLoginToken { loginToken := foundLoginToken[1] //tmp go regex not support named group, so use index here gLogger.Info("found loginToken=%s", loginToken); } else { gLogger.Warn(" not found loginToken from html=%s", getApiRespHtml); }
可以输出:
found loginToken=962e3720455ccfcafc374cef77c0c507 |
6.关于通过group的名字获得所查找到的内容,go中不支持。
但是有人:
是已经实现了。
但是还是那句:
go的正则本身不支持,从这点来说,还是很挫的。
等待go以后继续发展,继续支持吧。
【总结】
对于如何字符串:
var bdPass=bdPass||{}; bdPass.api=bdPass.api||{}; bdPass.api.params=bdPass.api.params||{}; bdPass.api.params.login_token='962e3720455ccfcafc374cef77c0c507'; bdPass.api.params.login_tpl='mn'; document.write('<script type="text/javascript" charset="UTF-8" src="https://passport.baidu.com/js/v2ApiUsedTangramFunctions.js?v=20130916"></script>'); document.write('<script type="text/javascript" charset="UTF-8" src="https://passport.baidu.com/js/pass_api_login.js?v=20130916"></script>');
通过如下代码:
//bdPass.api.params.login_token='278623fc5463aa25b0189ddd34165592'; //use regex to extract login_token loginTokenP, _ := regexp.Compile(`bdPass\.api\.params\.login_token='(?P<loginToken>\w+)';`) //loginToken := loginTokenP.FindString(getApiRespHtml); //loginToken := loginTokenP.FindSubmatch(getApiRespHtml); foundLoginToken := loginTokenP.FindStringSubmatch(getApiRespHtml); gLogger.Debug("foundLoginToken=%s", foundLoginToken); if nil != foundLoginToken { loginToken := foundLoginToken[1] //tmp go regex not support named group, so use index here gLogger.Info("found loginToken=%s", loginToken); } else { gLogger.Warn(" not found loginToken from html=%s", getApiRespHtml); }
可以获得所要的:
found loginToken=962e3720455ccfcafc374cef77c0c507 |
的。
转载请注明:在路上 » 【记录】go语言中用正则表达式查找某个值