我想匹配表单的表达式
set _ on(\s*)set _ off
其中两个下划线都_
代表一个连续的字符串。
这个想法是匹配以下内容:
set foo on blah halb set foo off
设置栏打开 设置栏打开 设置栏打开 设置栏关闭
重要的是,在我的情况下,这些指令以设置为开始,以设置为结束。
我想匹配表单的表达式
set _ on(\s*)set _ off
其中两个下划线都_
代表一个连续的字符串。
这个想法是匹配以下内容:
set foo on blah halb set foo off
设置栏打开 设置栏打开 设置栏打开 设置栏关闭
重要的是,在我的情况下,这些指令以设置为开始,以设置为结束。
怎么样
set\s[^\s]+\son
set\s[^\s]+\soff
说明:[^\s]+
匹配不包含空格的字符串。set\s[^\s]+\son
匹配任何类似的东西set foo on
,但不匹配set foo bar on
or set on
。结合上述表达式将匹配您想要的任何内容。
您使用哪种正则表达式?
您可以在 perl 中进行反向引用:
m/^\s*set\s*(\w*)\s*on.*set\s*\1\s*off\s*$/
^(set bar on)|(set bar off)$
分解:
^(set bar on) = Looks for "set bar on" at the beginning of a string
(set bar off)$ = Looks for "set bar off" at the end of the string.
这将匹配set bar on
字符串开头和set bar off
结尾处的 a。您可以进行替换以将它们更改为空白字符""
,然后将剩余的数据拉出以进行匹配。我不知道您在执行正则表达式时使用什么,所以除此之外我无能为力。\s
如果要删除set bar on
前后的空格,也可以在开头和结尾添加set bar off
。