wInkly_cc 发表于 2014-6-25 23:36:48

正则怎样匹配多个“或”关系的字符串

不知道描述会不会使人困惑
题目:如下字符串
<td>K_F10B20CB405E4861E2F4FFFF</td>
<td>0</td>
<td>2014-06-25 06:59:09</td>
<td>1</td>
<td style="text-align: center;"> <span style="color:red">×</span></td>
<td style="text-align: center; width: 120px;">116.204.95.118_29分钟</td>
</tr>
<tr>
<td>M-F07AB2863A7F7E20EEEE84C9D</td>

我需要匹配出“K_F10B20CB405E4861E2F4FFFF”和“M-F07AB2863A7F7E20EEEE84C9D”,这两串的规则是以“M-”或“K_”开头连续多个字母加数字组合,直到非字母数字字符
我用的正则   (M-)|(K_)[\w\d]+?
用这个匹配出3串;空,"K_","M-";首先有个问题是“[\w\d]+?”没有生效,另外“|”符号将整个正则分割规则我不是很懂,求解惑。3ks

haijie1223 发表于 2014-6-26 00:08:51

.*(?=<)

kevinch 发表于 2014-6-26 07:06:08

按楼主的思路,应该是((?:M-|K_)\w+)

wInkly_cc 发表于 2014-6-26 12:58:17


haijie1223 发表于 2014-6-26 00:08 http://www.autoitx.com/images/common/back.gif


    谢谢 haijie1223 ,调试可以通过,字符来自网页,以k、m为开始字符匹配一个网页的字段不是很精准
另外你的正则有一点我不太明白“(?=<)”应该表示以“<”结尾吧,那“=”号像是表达式而不应该是个硬匹配字符,能解释下“=”在正则怎么使用的吗,我的帮助文档里没有
如果是要匹配以“</td>”结尾而不是“<”,可以直接写“.*(?=</td>)”吗,调试可以通过单位不知到后面的有没有生效

wInkly_cc 发表于 2014-6-26 13:04:13

按楼主的思路,应该是
kevinch 发表于 2014-6-26 07:06 http://www.autoitx.com/images/common/back.gif


    谢谢 kevinch ,正则符合需求。“?:”看帮助还是不太懂,请问下如果是3段字符字符串可不可以这样写“((?:M-|K_|N-)\w+)”?

haijie1223 发表于 2014-6-26 14:01:58

回复 4# wInkly_cc


http://baike.baidu.com/view/94238.htm?fr=aladdin

kevinch 发表于 2014-6-26 16:40:00

回复 5# wInkly_cc
?:表示这个括号内的不参与分组,如果分组了会被单独取到
后面那个3段字符串的是对的

wInkly_cc 发表于 2014-6-26 20:44:41

回复 6# haijie1223


谢谢,辛苦了

wInkly_cc 发表于 2014-6-26 20:44:51

回复 7# kevinch


    谢谢

f4李文杨 发表于 2014-6-26 22:02:57

我对正规不太懂!这就是很弱.....{:face (229):}

ollydbg 发表于 2014-6-27 05:28:13

(\w[-_]\w+)</td>

wangms 发表于 2014-6-27 13:56:03

帮你顶一下

wInkly_cc 发表于 2014-7-8 22:46:44

再请问下,如果要匹配以测试码开始,直到测试码或文本结尾结束怎么匹配,如下面这个例子
td>M-6C269C42F44FA0F32E934D8F8F9D2D</td>
                                 <td>1.1.0.0</td>
<td>M-6C269C42F44FA0F32E934D8F8F9D2D</td>
<td>2014-06-25 03:01:45</td>
<td>M-6C269C42F44FA0F32E934D8F8F9D2D</td>
aaaaaa

我需要匹配出3组
1.“M-6C269C42F44FA0F32E934D8F8F9D2D</td>
                                 <td>1.1.0.0</td> "
2."M-6C269C42F44FA0F32E934D8F8F9D2D</td>
<td>2014-06-25 03:01:45</td>"
3."M-6C269C42F44FA0F32E934D8F8F9D2D</td>
aaaaaa"

”((?:M-|K_)\w+)“这个正则匹配出来的就是测试码
这么做是因为以测试码开始,后面有0或1次出现ip,版本,机器码等信息,所以我需要先分割字符串再去正则提取信息,请问能用正则分割或其他方法实现吗,谢谢

kevinch 发表于 2014-7-9 07:04:15

((?:M-|K_)[\s\S]+?(?:\<td\>[^<>]*\<\/td\>|$))
这个试下

wInkly_cc 发表于 2014-7-10 15:23:48

回复 14# kevinch


    答案很接近了,可能还要你浪费点时间帮忙修改下,我贴下真实的字符串。“116.204.95.200”就是IP,我需要提取出来,版本号可以不用管了。               <td>M-3B4F69BF57B286031B6C79AC3</td>
                                 <td>0</td>
                  <td>2014-07-10 06:54:20</td>
                  <td>1</td>
                  <td style="text-align: center;"> <span style="color:red">×</span></td>
                  <td style="text-align: center; width: 120px;">116.204.95.200_19分钟</td>
                   </tr>
                   <tr>
               <td>M-C2D3B7D5CEB974422D0919242</td>
                                 <td>2.1.1.1</td>
                  <td>2014-07-10 06:49:40</td>
                  <td>1</td>
                  <td style="text-align: center;"> <span onclick="alert('AB534EB2C427BBE9C5FD8D50F15CFABB,EA6A35103C5F31087D2CB6FB14D7C8A3,70837337399BB73A81D96710CE9328FD')">3组</span></td>
                  <td style="text-align: center; width: 120px;">116.204.95.200_27分钟</td>
                   </tr>
                   <tr>
               <td>M-6C269C42F44FA0F32E934D8F8E9NMT</td>
                                 <td>2.6.0</td>
                  <td>2014-07-10 01:41:58</td>
                  <td>1</td>
                  <td style="text-align: center;"> <span onclick="alert('33AC6E97B7B20A4E444969BA787765D3,1F5F7597D8E618135212EC9115815255,1C0491F59FA4D03754E12CA4445133B7')">3组</span></td>
                  <td style="text-align: center; width: 120px;">/</td>
                   </tr>
                   <tr>
               <td>M-6C269C42F44FA0F32E934D8F8F9D2D</td>
                                 <td>1.5.0.0</td>
                  <td>2014-07-07 10:25:08</td>
                  <td>1</td>
                  <td style="text-align: center;"> <span onclick="alert('AB534EB2C427BBE9C5FD8D50F15CFABB,EA6A35103C5F31087D2CB6FB14D7C8A3,70837337399BB73A81D96710CE9328FD')">3组</span></td>
                  <td style="text-align: center; width: 120px;">/</td>
                   </tr>
                   <tr>
               <td>K_2563287E515783F7D4727AB5</td>
                                 <td>1.6.0</td>
                  <td>2014-07-08 01:38:41</td>
                  <td>1</td>
                  <td style="text-align: center;"> <span onclick="alert('6196608085C964C3CE6EAB4C570B4A37,CD849DC39B23FD4DC0307795F0C9BEF6,CF84F9C4D2B25977AAA2E2C31ED46481')">3组</span></td>
                  <td style="text-align: center; width: 120px;">/</td>
                   </tr>
                   <tr>
ip后面一定会有个倒计时时间,小于30分钟
页: [1]
查看完整版本: 正则怎样匹配多个“或”关系的字符串