正则表达式 – 非贪婪的正则表达式匹配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作为替代方案之一. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |