加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:26:56 所属栏目:百科 来源:网络整理
导读:考虑字符串“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 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作为替代方案之一.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读