最后写出来的表达式是 (?<=</user>)(?![\w\W]*</user>)[\w\W]+

首先用 (?<=</user>) 匹配所有前面是 </user> 的位置,如图,总共有三个位置。 这里写图片描述

这里我们正则表达式 (?<=</user>) 的意思就是匹配的位置之前的字符串是 </user> ,也就是我们匹配到的位置在 </user> 之后。

这里用到了正则表达式语法中的 断言 ,有的书上也称该语法为 预查 或者 环视 ,都是一样的用法。有如下语法:
(?=pattern) 零宽正向先行断言 (?!pattern) 零宽负向先行断言 (?<=pattern) 零宽正向后行断言 (?<!pattern) 零宽负向后行断言
这里用到的是(?<=pattern),零宽表示它匹配的是在字符串中的位置,如同^匹配字符串串首,$匹配字符串串尾。正向代表它必须满足pattern。后行代表它匹配的位置在pattern之后。

其次,再这三个位置上进行筛选,能够看出这三个位置的区别是后面是否有 </user> ,如果没有的话那么它就是最后一个 </user> 后面的位置。在之前的表达式后面添上 (?![\w\W]*?</user>) 此时表达式变为 (?<=</user>)(?![\w\W]*?</user>) 这里写图片描述
能够看到得到了最后一个匹配结果。

这里的正则表达式(?!pattern) 是零宽负向先行断言,也就是它会往后匹配pattern,匹配到的位置在pattern之前,并且匹配到的字符串必须不满足pattern。
(?![\w\W]*?</user>) 的意思是在匹配到的位置后面必须不是 [\w\W]*?</user> ,\w匹配的是[a-zA-Z0-9_]即匹配字母数字和下划线,而\W匹配的是[^a-zA-Z0-9_]即不是字母数字也不是下划线的字符,同时匹配这两个就相当于匹配任意字符。[\w\W]后面的*代表匹配0-任意多次,后面的?代表懒惰模式,即只要满足条件就立即返回。

最后,在之前的正则表达式后面加上 [\w\W]+ 贪婪匹配即尽可能多的匹配该位置后面的字符串。最终的正则表达式是 (?<=</user>)(?![\w\W]*?</user>)[\w\W]*

最后的最后用四张图简单地描述四种断言的不同之处。
这里输入的字符串都是123456。

(?=3) ,它匹配的位置是后面的字符为3的位置。

(?<=3) ,它匹配的位置是前面的字符为3的位置。

(?!3) 匹配的位置是后面的字符不为3的位置,可以看到箭头所指的地方没有被匹配到,其他位置都被匹配到了。

(?<!3) 匹配的位置是前面的字符不为3的位置,可以看到箭头所指的地方没有被匹配到,其他位置都被匹配到了。

如何查找 字符串 中某 字符 最后 一次 出现的位置呢,可 使用 find语句,abap中可 使用 正则 表达式Regex的语句就只有find以及replace语句了。 以下代码块表示了如何操作: DATA: text TYPE char100, moff TYPE i, mlen TYPE i, mcnt TYPE i. text = '123A45A678'. WRITE: / '转换前:',text. FIND ALL OCCURRENCES OF 'A' IN text
可以 使用 以下代码来 匹配 字符串 最后一个 字: let str = 'abcdefg'; let lastWord = str.match(/\b(\w+)\b(?!.*\b\1\b)/)[0]; console.log(lastWord); // "g"
我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/f2PFnN 使用 Java Matcher 正则 匹配 获取 最后一个 匹配 项 在开发过程中, 正则 表达式是一种强大的工具,可以帮助我们处理和解析 字符串 数据。今天,我们将学习如何 使用 Java 的 Matche...
^ 限制 匹配 的内容必须从开头判断 $ 限制 匹配 的内容必须包含结尾 使用 re.match()自带判断开头,但是不判断结尾,也就是即使在 匹配 字符 前面部分符合限制条件,后面部分即使不服务,也有返回对象 例如:以下2种情况能 匹配 成功,第3种 匹配 失败 ret = re.match(r"\d{3}", "123") ret.group() ret = re.match(r"\d...
$div_see = $this.parent().parent().children(".l_see"); var path = $div_see.children("a").attr("href"); var reg=new RegExp("_[0-9]+.htm$","g"); path = path.replace(reg,"_"+"此处为要 匹配 的随意变量"+".htm");