http://www.dewen.net.cn/q/15328/问个正则表达式 贪婪 和 不匹配某个字符串问题

http://www.dewen.net.cn/q/15328/问个正则表达式 贪婪 和 不匹配某个字符串问题

ovalpo
1 票
ovalpo 8
举例说明,例如有行文本,想找出由 << 和 >> 包住,且含字符 b 的最小串。
文本1 <<b>> 0 <<abc>>
文本2 <<a>> 0 <<abc>>
文本3 <<a>> 0 <<a</Br>bc>>
我用的正则

<<.*?b.*?>>

结果如下:
文本1,匹配出了2个结果
文本2,匹配出了1个结果
文本1,匹配出了两个结果;
文本2,匹配出了1个结果,但是不是我期望的,我期望是后半部分。
不知道这里 贪婪 是怎么解释?
还有如果我想在点号 . 任意匹配改成不匹配某个字符串 如 中间不能出现 << 或 >>,但是 匹配符 点号 . 和 反义 [^] 都好像是处理单个字符的情况。
不能写成 <<[^><]*?b[^><]*?>> 之类, 因为,还有可能有 文本3 这种情况出现。
求这种该怎么弄?

ovalpo 编辑于2013-11-02
评论 (0) • 举报 (0) • 分享 • 链接 • 2013-11-01 
添加评论...
1个答案 票 数
brayden认证专家
0 票
brayden6562
最佳答案
<<([^<]|<(?!<))*?b([^>]|>(?!>))*?>>

在regexpal上用你的测试用例 通过. 大概解释一下:

/
<<
([^<] # 非 '<'
| # 或者
<(?!<) # negative lookahead, <后面不能有<
)*?
b
([^>] # 解释同上
|
>(?!>)
)*?
>>
/x

posted @ 2016-03-10 15:37  brayden  阅读(771)  评论(0编辑  收藏  举报