2014-10-29 44 views
1

我需要一些在正則表達式中比我有更多知識的人的幫助。 我的問題是想發佈一個表單,但需要一個'reloadToken',它需要發佈。該reloadToken可以在一個隱藏的價值的網頁源代碼中找到,例如:C#RegEx在源代碼中查找令牌

<input type="hidden" name="reloadToken" value="80c52d77d3e2eeb32fac3a6940ab6cc4" /> 

的reloadToken的價值變化,每頁面加載,我現在發送一個GET請求,並保存源的變量,用正則表達式我應該能夠搜索源reloadToken,但我的正則表達式的知識接近零。

我希望有人可以幫助我使用正則表達式。

還有一件事,pageource中有更多的reloadToken,但是它們都具有相同的值,所以它應該沒關係?

在此先感謝。

回答

1

什麼其他的答案被遺忘的是,你在它有自己的編譯器escapes其中大部分在正則表達式鏡像C#的工作。

他們的模式可能會工作,但你會爭取雙引號的C#解析器轉義之前,它甚至得到正則表達式,它可能會損害模式,將導致失敗。

低於我的模式我展示瞭如何使用文字轉義@在C#中的純粹的文本模式發送到解析器在C#:

string data="<input type=\"hidden\" name=\"reloadToken\" value=\"80c52d77d3e2eeb32fac3a6940ab6cc4\""; 

string [email protected]"(?:reloadToken.+value="")(?<Token>[^\""]+)"; 

Console.WriteLine (

    Regex.Match(data, pattern) 
     .Groups["Token"] 
     .Value); 

// Output 
// 80c52d77d3e2eeb32fac3a6940ab6cc4 

否則花樣說

  • (?: ...) - 匹配但不捕獲特定的一組文本。我們不需要拍攝或者匹配它,它只是錨文本;看下一個...
  • reloadToken.+value="" - 實際的文本「重新加載令牌」,那麼我們將通過指定.哪個匹配任何東西來吃掉通用空間。但我們想要匹配多個,所以我們添加一個+,這意味着1到很多次。所以空間將被吃掉直到value="

  • (?<Token> ...) - ()說這是一個匹配組。 ?<xxx>命名匹配組。在我們的情況下,我們的比賽組將被命名爲「令牌」,這將允許我們從match capture group(正則表達式)中以該名稱替代索引來提取它。

  • [^\""]+ - []說這是一個定義。在我們的定義中,我們說^沒有任何"報價。所以我們想要匹配除報價之外的任何東西,最後我們說我們的匹配組可以是匹配+ 1個或更多個字符。這將停止在第一個"

+0

謝謝,這解決了我的問題,我現在得到了reloadToken,並可以繼續我的項目。 – 2014-10-29 18:18:37

+0

@LethalNET正則表達式的基礎知識實際上是''''''和'['''''帶有'.'和'+'和'*',其餘部分是文字或文字替換的複雜性增加的情況。使用正則表達式工具學習基本知識以嘗試它們會打開許多​​不同的字符解析/分析情況。 HTH – OmegaMan 2014-10-29 20:01:24

1

你可以用這個表達式趕上你reloadedToken的價值:

/name="reloadToken" value="(\w*)"/ 

DEMO(請看右側面板上的匹配信息)

希望它能幫助。

0

這應該適合你。您希望獲得的價值是一個捕獲組,其餘的則不是。

(?:name="reloadToken" value=")([^"]*)