2009-08-07 72 views
0

我需要從以下代碼行問題使用正則表達式來提取文本

<label for="<%=foobar.bar %>">Password:</label> 

<label for="foobar">Password:</label> 

我需要提取foobar,我可以使用此提取:(?<=for=")[^"]+(?=("))提取:

<%=foobar.bar %> 

foobar 

但我不想要<%=.bar,如果我嘗試創建(?<=for=")[^"]+(?=(")) | (?<=for="<%=)[^"]+(?=("))它不起作用,因爲包含<%=的標籤符合這兩個條件,我不認爲您可以使用XOR?這是任何人都可以幫助我嗎?

的Merci :)

回答

1

非貪婪形式,我認爲這是更好地沒有創造尤伯杯正則表達式。做你的任務在幾個步驟:

  1. 提取<%=foobar.bar %>foobar與您正則表達式(?<=for=")[^"]+(?=("))
  2. 檢查結果一致的正則表達式像<%=([\w]+)\.bar\s*%>
  3. 如果是使用$1組從匹配,否則使用步驟結果2
  4. 你得到foobar的
+0

謝謝你,我用(?<=爲= \ 「)[^ \」] + (?=(\「)),然後繼續使用:(?<= <%= \ s *)[^ \ s] +(?= \。bar \ s *%>) – Sara 2009-08-07 12:29:07

0

你可以試試這個:

(?<for="(<%=)?)[^" ]*(?=(%>)?") 

假設你想捕捉從不包含空格什麼。否則,你可以嘗試:

(?<for="(<%=)?)[^"]*?(?=(%>)?") 

要使用的[^"]*