2012-03-01 34 views
0

我做的,用正則表達式來發現這句法字的文章微調:文章微調與2層

{word1|word2} 

,然後在他們分手「|」,但我需要一種方法來使其支持2級括號,如:

{{word1|word2}|{word3|word4}} 

什麼我的代碼做當這樣的線呈現,是採取「{{字詞1 |單詞2}」和「{WORD3 | word4}」,這是不是意。

我想要的是當用這樣一行代碼時,我的代碼將其分解爲「{word1 | word2} | {word3 | word4}」,以便我可以將它與原始函數一起使用並將其分解爲實際的話。

我正在使用c#。

這裏是它如何可能看起來像僞代碼:

Check string for regex match to "{{word1|word2}|{word3|word4}}" pattern 
If found, store each one as "{word1|word2}|{word3|word4}" in MatchCollection (mc1) 
Split the word at the "|" but not the one inside the brackets, and select a random one (aka, "{word1|word2}" or "{word3|word4}") 
Store the new results aka "{word1|word2}" and "{word3|word4}" in a new MatchCollection (mc2) 
Now search the string again, this time looking for "{word1|word2}" only and ignore the double "{{" "}}" 
Store these in mc2. 
I can not split these up normally 

這裏是我用來搜索正規表達式「{字詞1 |單詞2}」:

Regex regexObj = new Regex(@"\{.*?\}", RegexOptions.Singleline); 
MatchCollection m = regexObj.Matches(originalText); //How I store them 

希望有人能幫助,謝謝!

編輯:我解決了這個使用遞歸方法。我正在構建一個文章微調btw。

+0

真是一個令人困惑的問題(?) - 它可以幫助我們找到一個解決方案,如果我們知道你在用'word1' 'word2'數據 - 也許有一個解決方案,不涉及正則表達式(?) – 2012-03-01 15:29:59

回答

2

這不是使用正則表達式進行解析,而是必須使用遞歸下降解析器。

  1. {[
  2. |,
  3. wordX"wordX"(正則表達式\ w +)

然後你輸入

{{word1|word2}|{word3|word4}} 

BEC:通過更換其映射到JSON omes有效的JSON

[["word1","word2"],["word3","word4"]] 

,當你調用json_decode將直接映射到PHP數組。

在C#中,JavaScriptSerializer也應該是可以的。

+0

'正則表達式(@「...'讓我覺得問題是缺少一個C#標記...但我可能是錯的 – 2012-03-01 15:21:45

1

我真的不能完全知道你是問什麼,但我會搏一搏:

如果你想獲得{word1|word2}|{word3|word4}{{word1|word2}|{word3|word4}}任何發生,但不{word1|word2}{word3|word4},然後使用此:

@"\{(\{[^}]*\}\|\{[^}]*\})\}" 

...這將比賽{{word1|word2}|{word3|word4}},但與第一個匹配的組中{word1|word2}|{word3|word4}

我不確定這是否會有所幫助,或者即使它沿着正確的軌道,但我會盡量每隔一段時間檢查一次,以瞭解更多問題或澄清。

+0

嗨,謝謝但是我放棄了正則表達式,我使用了遞歸方法來完成它。 – TheGateKeeper 2012-03-01 15:36:18

-1

s =「{紡紗|重寫|旋轉|內容紡紗|重寫| SEO內容機器}是{fun | enjoyable | entertaining | exciting | enjoyment}!嘗試一下{自己|自己|自己|自己|爲你}和{看看如何|觀察}它{工作|功能|操作|執行|有效}。「 打印旋(S)

如果你想使用[方|括號|語法]使用該行的處理功能:

「/(((> [^ [] +)? |?(?R))*)]/x',