2011-06-02 54 views
1

我有以下字符串:正則表達式,幫助斷言

<a name="subhd_182"></a> 
<a name="st_394"></a> 
<a name="st_395"></a> 
<a name="qn_494"></a> 
<a name="st_495"></a> 
<a name="qn_594"></a> 
<a name="st_595"></a> 

<a name="subhd_282"></a> 
<a name="qn_694"></a> 
<a name="st_695"></a> 
<a name="qn_794"></a> 
<a name="st_795"></a> 
<a name="qn_894"></a> 
<a name="st_895"></a>` 

而且我想<a name="qn_\d*"></a>更換每<a name="st_\d*"></a>如果它緊跟<a name="subhd_\d*"></a>

我用這個表達式%(.*<a name="subhd_.*)(?=<a name="st(?!<a name="qn))(<a name=")st(.*)%sU$1$2qn$3取代。但它也取代第二種情況

+0

我不知道爲什麼我以前沒有接受任何答案,我認爲有一些資格,我沒有發佈,但只要這兩個答案工作,正如我剛纔測試他們,我'同時接受和提升兩者 – llamerr 2013-01-07 11:08:28

回答

2

我假設你只想匹配上面第一個subhd行後的名稱,但不是第二個,因爲第一個是「st_」,第二個是「qn_ 」。

嘗試:

(<a name="subhd_\d+">\s*<\/a>\s*<a name=")st(_\d+">) 

,你將取代爲$1qn$2注意,這裏我假定你是相當的文字時,你說:「它緊跟

我真的不明白你爲什麼「除非你想要實現的實際規則比你所說的更復雜,否則你會再次向前看。」

1

嘗試:%(<a name="subhd_\d+"></a>\n<a name=")st(.*)%sU並替換爲$1qn$2。在旁註中,我沒有真的知道U修飾符在這裏爲你做了什麼。此外,您可能需要根據您的操作系統更改您的\n換行匹配器。

我發現RegExr是一個非常有用的正則表達式工具。