正则表达式:查找两个未知标签之间的文本

标签 regex match validation

我有一个像这样的字符串:

<!NAME!>Admin : <!NAME!><!MSG!>Hello Guys<!MSG!><!ADD-ACC!>BOSS<!ADD-ACC!>

我想编写一个正则表达式模式来提取两个相同标签之间的文本,例如

<!NAME!>Admin : <!NAME!>
<!MSG!>Hello Guys<!MSG!>
<!ADD-ACC!>BOSS<!ADD-ACC!>

所以我写了这个正则表达式:

<!.*!>.*<!.*!>

但它给了我这个结果

<!NAME!>Admin : <!NAME!><!MSG!>Hello Guys<!MSG!><!ADD-ACC!>BOSS<!ADD-ACC!>

我明白为什么这样做,因为

 <!NAME!> and <!ADD-ACC!> follows the regex pattern i am using.

所以我在考虑正则表达式中类似的东西

<!XXX!>.*<!XXX!> where XXX is the same text between tags so that REGEX could find and extract those tags from text like how i want it to be done.

最佳答案

您可以使用反向引用

(<!.*?!>).*?\1

.*是贪婪量词,尽可能匹配

.*?是一个惰性量词,它尽可能更少匹配

(<!.*?!>)将捕获组 1

中的标签

我们可以使用 \1 在正则表达式中引用组 1 中捕获的值..所以,\1指第一个捕获的组值

关于正则表达式:查找两个未知标签之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17575771/

相关文章:

javascript - 包含多个文件和其他输入字段的表单验证

java - Java 中字符串的输入验证

c# - 如何使用 ExpressionTree 创建一个使用 Regex 的谓词

regex - XSD 模式限制 - 与正斜杠交替

r - 从数据框中提取与向量匹配的行,但匹配必须始终位于值中字符串的末尾

python - 根据正则表达式模式拆分字符串

c# - 如何使 C# Windows 窗体 DropDownList 的行为类似于浏览器下拉列表?

javascript - 如何匹配其他所有内容,但无论它与正则表达式匹配?

java -\G 在 .split 中如何工作?

c# - MVC3 十进制字段未正确验证