2012-04-18 44 views
3

我試圖匹配來自第一個標記<test>的文本內容。RxExp匹配第一個標記

例如:

<test>SAMPLE TEXT</test><test>SAMPLE TEXT2</test><test>SAMPLE TEXT3</test> 

如果我使用

("<test>(.*)</test>")` 

我得到這個:

SAMPLE TEXT</test><test>SAMPLE TEXT2</test><test>SAMPLE TEXT3 

如何讓剛剛從第一<test>標籤內容:SAMPLE TEXT

+5

看起來像XML。幸運的是,.NET有一些非常優秀,易於使用的XML解析庫。爲什麼不使用它們? – 2012-04-18 13:15:34

+0

是的,我知道..我已經在使用它們。但在這種情況下,我真的需要正則表達式。這是我的例子,只是爲了展示我需要什麼,但實際上它不是有效的xml。 – 2012-04-18 13:31:55

回答

4

(.*)是貪婪(意爲「一切可以匹配,直到找到最後</test>」),你要尋找的非貪婪版本(.*?)(意爲「小到可以匹配,直到找到非常第一個</test>「)。

但不要記住the call of Cthulu想着用正則表達式解析HTML時並看看this question了關於使用.NET解析HTML的最佳實踐的討論。或者,如果這是XML(而不是HTML),那麼通過一切手段,使用XmlReader以適當(並且容易)的方式進行。

1

而不是.*使用.*?

問號使得星號懶,使其匹配儘可能少。沒有它,星號是貪婪的,並且儘可能匹配。 @Radu的

1

答案是非常好的,但也儘量申請審查下列內容:

"<test>([^<]*)</test>" 
+0

那麼,這不會匹配<一些其他標籤/>'。然後再次,XML解析充滿了陷阱。 – rid 2012-04-18 13:20:16

+0

@Radu完全同意。這就是爲什麼你回答更好。但是,當Ljupco_Sofijanov真的確定只有TEXT是可能的時候,這種情況可能會非常快。 – Dewfy 2012-04-18 13:22:25

1

我同意,你可以使用XML解析庫,但無論如何,我會回答:

("<test>([^<]*)</test>") 

會分析與'<'不同的所有字符,這是您要忽略的第一個字符。

HTH。