2010-03-18 57 views
2

你好,再次Stackoverflow的人!正則表達式:積極的超前性和字邊界問題

假設我有這樣的話:智能手機,智能手機

我想從它們內部匹配串「手機」。但是,在這兩種情況下,我只需要「電話」返回,而不是第一種情況下的「電話」。除此之外,只有在「phone」這個詞只是後綴的情況下,我纔想要匹配,例如:

fonephonetics(只是一個示例)不匹配。

我認爲正則表達式

(phone([?=s])?)\b 

會給我什麼,我需要的,但它是目前匹配「手機」和「手機」,而不是「fonephonetics」之一。我不需要「手機」。我要爲這兩種情況「打電話」。

關於什麼是錯的,以及我能做什麼的任何想法?

預先感謝您!

+1

如果你知道你在找什麼子串,爲什麼你需要正則表達式來返回這個子串? – 2010-03-18 18:22:56

+0

你使用哪種語言? [?= s]通常表示一個匹配'?','='或's'的字符類。 – 2010-03-18 18:34:29

+0

@Mark:Java。 @ mmyers:因爲我需要查看「phone」是否出現在一系列行中,如果是,請返回包含它的行。但我也想爲例如電話的變化。 「電話」進行匹配。 這是一個簡單的例子btw。 – 2010-03-18 18:36:49

回答

5

要匹配,隨後要麼s\b\bphone

phone(?=s?\b) 

先行是零寬度匹配,因此s不會隨着比賽的一部分被返回。

+0

您的解決方案有效。如果我不得不使用替換來匹配一系列其他詞作爲後綴?(電話(?= s?\ b)| test | test2)\ b將不起作用。 任何解決方案? – 2010-03-18 18:38:38

+1

@Inf:在自己的一組括號中隔離交替:'(phone | test | test2)(?= s?\ b)' – 2010-03-18 18:50:32

+0

非常感謝!這就是我想要的! :) 請問您爲什麼把(?= s?\ b)放在它自己的圓括號裏時,它有效嗎?或者點我一些鏈接,我可以得到這些信息? – 2010-03-18 19:29:06