正则表达式 – 非贪婪的正则表达式匹配awk中的多字符分隔符

前端之家收集整理的这篇文章主要介绍了正则表达式 – 非贪婪的正则表达式匹配awk中的多字符分隔符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑字符串“AB 1 BA 2 AB 3 BA”.如何以非贪婪的方式(在awk中)匹配“AB”和“BA”之间的内容

我尝试过以下方法

awk '
BEGIN {
    str="AB 1 BA 2 AB 3 BA"
    regex="AB([^B][^A]|B[^A]|[^B]A)*BA"
    if (match(str,regex))
        print substr(str,RSTART,RLENGTH)
}'

没有输出.我认为不匹配的原因是“AB”和“BA”之间存在奇数个字符.如果我用“AB 11 BA 22 AB 33 BA”替换str,正则表达式似乎有效..

合并两个否定的字符类,并从第二个替换中删除[^ A]:
regex = "AB([^AB]|B|[^B]A)*BA"

然而,这个正则表达式在字符串ABABA上失败了 – 不确定这是否是一个问题.

说明:

AB       # Match AB
(        # Group 1 (could also be non-capturing)
 [^AB]   # Match any character except A or B
|        # or
 B       # Match B
|        # or
 [^B]A   # Match any character except B,then A
)*       # Repeat as needed
BA       # Match BA

由于在交替中匹配A的唯一方法是匹配除B之外的字符,我们可以安全地使用简单B作为替代方案之一.

原文链接:https://www.f2er.com/regex/357012.html

猜你在找的正则表达式相关文章