3.7.6 关联函数web_reg_save_param_regexp详解
在介绍这个函数前先来处理一种情况。前面关联的左右边界都是静态的,如果左右边界是动态的,并且系统返回的id是不定长度的,那么如何使用关联函数将该id取出呢?这个问题在现实情况中会经常遇到,仅仅通过一个关联函数是无法处理的,这个时候还需要使用一个函数strtok()来进行字符内容切割。
strtok()函数的作用是通过某个分隔符来切分内容的。
例如:
char city[1000]; char * token; //这个函数是扩展的声明 extern char * strtok(char * string, const char * delimiters ); strcpy(city,"this is shanghai!"); token = (char *)strtok(city," "); lr_error_message(token); token = (char *)strtok(NULL," "); lr_error_message(token); token = (char *)strtok(NULL," "); lr_error_message(token); |
通过这个函数可以得到3个字符:this、is、shanghai。通过空格来分隔字符串,可以得到第一个符合该条件的内容,如果需要继续分隔就使用strtok(NULL," ");语句。如果关联出来的内容sessionid是变动长度的,如"sessionid=54321123&action=work",则如何获得这个变动长度的sessionid呢?使用下面的代码即可解决:
char temp[100]; char * token; extern char * strtok(char * string, const char * delimiters ); lr_save_string("sessionid=54321123&action=work","param"); strcpy(temp,lr_eval_string("{param}"));//取出参数值,并且赋值给变量temp token = (char *)strtok(temp,"&");//使用&符号作为分隔符 |
这个时候token="sessionid=54321123",并且是根据&符号分隔的,所以id的长度可以任意变化,而token中的sessionid可以通过关联的时候Save Offset进行处理,或者使用strtok()函数对等号再次进行处理。
而在LR11中提供了web_reg_save_param_regexp正则表达式关联,上面的写法也可以退休了。打开Add Step添加步骤,选择web_reg_save_param_regexp函数,打开设置窗口,如图3.127所示。
图3.127 添加web_reg_save_param_regexp函数
在这个函数中关键就是在Regular Expression的写法上,在前面XML参数的lr_xml_find函数中我们提到过正则表达式的写法,在这里的写法唯一区别在于需要关联返回的内容需要用()圆括号标记。例如,这里的read(.*)\.php就是指所有符合read开头.php结尾中间的任何内容都关联保存到参数temp中,这里的\是转义符,确保.号能够正确地当做普通字符来匹配。
在Phpwind中如果我们要关联一个没有被回复过的帖子的发帖人是谁,这个在以前是比较难于实现的,我们先来看看一个帖子的HTML代码:
<tr class="tr3"> <td class="icon tac"><input type="checkbox" autocomplete="off" name="tidarray[]" id=tid_1884 value="1884" onclick="postManage.show </td> <td class="subject" id="td_1884"> <a href="read.php?tid=1884" name="readlink" id="a_ajax_1884" class= "subject_t f14">需要使用正则表达式关联的例子</a> <img src="images/wind85/file/new.gif" align="absmiddle" title="新帖标志" alt="新帖标志" /> </td> <td class="author"><a href="u.php?uid=1">admin</a><p>2011-10-05 </p></td> <td class="num"><em>0</em>/2</td> <td class="author"><a href="u.php?username=admin">admin</a><p> <a href="read.php?tid=1884&page=e#a" title="2011-10-05 13:43">4秒前 <span> </tr> |