正则表达式匹配最后一次出现与特定字符串
问题描述:
任何人都可以告诉我如何匹配两个点之间最接近的模式。例如,我有一个字符串“你好,你好,你好吗”,说我想提取包括“是”的句子。所以我写了正则表达式“。(。+?are。+?\。)”。但是,我只能得到“你好,你好吗”。而不是“你好吗”。任何人都可以帮助解决这个问题吗?非常感谢。正则表达式匹配最后一次出现与特定字符串
答
.
(元字符)包括.
(字符)。你可以通过排除像这样的.
字符得到想要的结果:
\.[^.]*?are[^.]*?\.
在PCRE
或者(?<=\.)[^.]*?are[^.]*?\.
或\.\K[^.]*?are[^.]*?\.
如果你想排除在比赛第1期。
它的工作原理。非常感谢。顺便说一下,你能告诉我“[^。] *?”之间的区别吗?和“。+?” – user4598881 2015-02-23 22:30:56
不客气。 '.'匹配一个不是换行符的单个字符。 '[^。]'匹配一个不是句号的单个字符。 '+'表示*“一次或多次”*,而'*'表示*“零次或多次”*。 '?'使得量词不合格。所以'。+?'表示*“一个或多个不包含换行符的字符(尽可能少)”*,'[^。] *?'表示*“零个或多个字符(尽可能少)不包含句点“*。 – 2015-02-24 00:08:53
Hi @ user4598881如果此答案已解决您的问题,请点击复选标记,考虑[接受它](http://meta.stackexchange.com/q/5234/179419)。这向更广泛的社区表明,您已找到解决方案,并为回答者和您自己提供了一些声誉:) (没有义务这么做!) – 2015-03-05 01:43:46