Regex 使用正则表达式在正则表达式的两个位置匹配不定字符串

Regex 使用正则表达式在正则表达式的两个位置匹配不定字符串,regex,Regex,我想匹配表单的表达式 set _ on(\s*)set _ off 其中,两个下划线均表示单个连续字符串 这样做的目的是匹配以下内容: 把foo设为开,把foo设为关 设置栏打开设置栏打开设置栏打开设置栏关闭设置栏 重要的是,在我的例子中,这些指令以设置为开始,以设置为结束。如何 set\s[^\s]+\son set\s[^\s]+\soff 说明:[^\s]+匹配不包含空格的字符串set\s[^\s]+\son匹配类似于set foo on,但不匹配set foo bar on或set

我想匹配表单的表达式

set _ on(\s*)set _ off
其中,两个下划线均表示单个连续字符串

这样做的目的是匹配以下内容:

把foo设为开,把foo设为关

设置栏打开设置栏打开设置栏打开设置栏关闭设置栏

重要的是,在我的例子中,这些指令以设置为开始,以设置为结束。

如何

set\s[^\s]+\son
set\s[^\s]+\soff
说明:
[^\s]+
匹配不包含空格的字符串
set\s[^\s]+\son
匹配类似于
set foo on
,但不匹配
set foo bar on
set on
。组合上述表达式将匹配您想要的任何内容


您使用的是哪种正则表达式?

您可以在perl中进行反向引用:

m/^\s*set\s*(\w*)\s*on.*set\s*\1\s*off\s*$/
细分:

^(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.

这将匹配字符串开头的
设置栏打开
,以及字符串末尾的
设置栏关闭
。您可以执行替换操作,将其更改为空白字符
”,然后将剩余数据取出以进行匹配。我不知道您在使用什么来实现regex,因此除了此之外,我帮不了您多少忙。如果要删除
打开设置栏
之后和
关闭设置栏
之前的空格,也可以在开头和结尾添加
\s
,我正在使用grepwin。我很难理解为什么你的建议会奏效,@DavidPerlaza我可能会误解你想要实现的目标。也许你可以澄清一下:(i)你是否在寻找一对匹配的
set xxx。。。关于
<代码>设置xxx关闭指令,其中xxx相同吗?或者(ii)是否要捕获所有出现的
设置xxx(开|关)
?两者都有。目前,我正在努力解决(ii)的一个方面,即确保要搜索的文件从设置xxx打开开始,最终以设置xxx关闭结束,而不是在设置xxx关闭后设置xxx打开。介于两者之间的任何行为都可以。下面的正则表达式使用back引用处理(i):set(.*)on(\s*)set\1 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.