2012-10-09 217 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