正则表达式中匹配最短范围的内容该如何写
我的目的是匹配红色框里的内容,请问正则式应该怎么写?我有点搞错,如果是汉字的话,我直接:“关键词[^关键词]*?重点”即可。其实我的问题是英文的状态下,该怎么办,如:zh...
我的目的是匹配红色框里的内容,请问正则式应该怎么写?
我有点搞错,如果是汉字的话,我直接:“关键词[^关键词]*?重点” 即可。其实我的问题是英文的状态下,该怎么办,如:zheshigeguanjiancizhongdeguanjiancizhongdezhongdianhaishiqitadezhogndian这时guanjianci[^guanjianci]*?zhongdian就不管用了,因为这样正则式理解为“非guanjianci”的集合,而没有把guanjianci当成一个整体看待。
说的有点乱了,其实我就是下面这个意思:
这种情况下,如何只匹配红框内的内容 展开
我有点搞错,如果是汉字的话,我直接:“关键词[^关键词]*?重点” 即可。其实我的问题是英文的状态下,该怎么办,如:zheshigeguanjiancizhongdeguanjiancizhongdezhongdianhaishiqitadezhogndian这时guanjianci[^guanjianci]*?zhongdian就不管用了,因为这样正则式理解为“非guanjianci”的集合,而没有把guanjianci当成一个整体看待。
说的有点乱了,其实我就是下面这个意思:
这种情况下,如何只匹配红框内的内容 展开
展开全部
要想匹配字符串zheshigeguanjiancizhongdeguanjiancizhongdezhongdianhaishiqitadezhongdian(注意你最后一个zhongdian的拼音写反了写成了zhogndian我给你改正过来了)中间的guanjiancizhongdezhongdian,
用这个的正则表达式:guanjianci((?!guanjianci|zhongdian).)*zhongdian
用这个的正则表达式: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变成一样的效果了.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询