正则表达式中匹配最短范围的内容该如何写

我的目的是匹配红色框里的内容,请问正则式应该怎么写?我有点搞错,如果是汉字的话,我直接:“关键词[^关键词]*?重点”即可。其实我的问题是英文的状态下,该怎么办,如:zh... 我的目的是匹配红色框里的内容,请问正则式应该怎么写?
我有点搞错,如果是汉字的话,我直接:“关键词[^关键词]*?重点” 即可。其实我的问题是英文的状态下,该怎么办,如:zheshigeguanjiancizhongdeguanjiancizhongdezhongdianhaishiqitadezhogndian这时guanjianci[^guanjianci]*?zhongdian就不管用了,因为这样正则式理解为“非guanjianci”的集合,而没有把guanjianci当成一个整体看待。

说的有点乱了,其实我就是下面这个意思:

这种情况下,如何只匹配红框内的内容
展开
 我来答
紫薇参星
科技发烧友

2014-10-03 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3656万
展开全部
要想匹配字符串zheshigeguanjiancizhongdeguanjiancizhongdezhongdianhaishiqitadezhongdian(注意你最后一个zhongdian的拼音写反了写成了zhogndian我给你改正过来了)中间的guanjiancizhongdezhongdian,
用这个的正则表达式:guanjianci((?!guanjianci|zhongdian).)*zhongdian
追问
谢谢紫薇,正是我想要的,我昨天也想到是用?!但一直写成
guanjianci(?!guanjianci|zhongdian).*?zhongdian

一直匹配不到,我不明白为什么要再加一个括号,而且还要把那个点也放进括号里?
没理解,能给我讲讲吗?谢谢
追答
表达式(?!guanjianci|zhongdian).会往前查找,看看前面是不是没有"guanjianci"或"zhongdian"字符串,如果没有(是其它字符),那么.(点号)就会匹配这些其它字符。(?!guanjianci|zhongdian)这种正则表达式的“查找”也叫做“zero-width-assertions”(零宽度断言),因为它不会捕获任何的字符,只是判断。
表达式(?!guanjianci|zhongdian).只执行一次,如果将这个表达式用括号包裹成组(group),然后用*(星号)修饰——匹配 0 次或多次:((?!guanjianci|zhongdian).)*,就表示匹配不含有"guanjianci"或"zhongdian"的字符串了.
如果用(?!guanjianci|zhongdian).*?,表示往前查找如果没有"guanjianci"或"zhongdian"字符串,就用.*?去匹配这些其它字符,实际上guanjianci(?!guanjianci|zhongdian).*?zhongdian和guanjianci.*?zhongdian变成一样的效果了.
知道名字很响亮
2014-10-03 · TA获得超过186个赞
知道小有建树答主
回答量:557
采纳率:0%
帮助的人:345万
展开全部
把中括号[]用分组的小括号()代替
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式