2011-06-02 51 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是一个非常有用的正则表达式工具。