2012-10-09 91 views
3

我想匹配的形式使用正则表达式以正则表达式

set _ on(\s*)set _ off 

其中两个突出_站在了一个连续的字符串表达的两个位置匹配不确定的字符串。

我们的想法是一致的东西,如下列:上等等HALB集富组栏上的设置栏关闭

集酒吧

集富集酒吧关闭

重要的是,这些指令,在我的情况下,开始设置和结束。

回答

1

您可以用Perl做回引用:

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

如何

set\s[^\s]+\son 
set\s[^\s]+\soff 

说明:[^\s]+不包含空格的字符串相匹配。 set\s[^\s]+\sonset foo on匹配,但不匹配set foo bar onset on。结合上述表达式可以匹配任何你想要的。

你正在使用哪种正则表达式?

+0

我正在使用grepwin。我无法理解您的建议为什么会起作用, –

+0

@DavidPerlaza我可能会误解您想要实现的目标。也许你可以澄清一下:(i)你是否寻找一对匹配的'set xxx ... on' ...'set xxx off'指令,其中'xxx'是相同的?或者(ii)是否要捕获所有出现的“set xxx(on | off)”? – January

+0

两者。目前我正在努力寻找(ii)的一个方面,即确保要搜索的文件以集合xxx开始并最终以集合xxx结束结束,而在将xxx设置为关闭之后没有设置xxx开启。它们之间的任何行为都很好。 下面的正则表达式处理(i)使用反向引用: set(。*)on(\ s *)set \ 1 off 请原谅我的任何混淆,并感谢您的回应! –

0
^(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 。您可以进行替换,将其更改为空白字符"",然后将剩余数据提取出来用于匹配。我不知道你用于你的正则表达式实现,所以除了这个之外,我无法帮到你。如果您想要删除set bar on之后和set bar off之前的空格,则还可以在开始和结束时添加\s