2013-03-06 34 views
0

有人可以幫助我在PHP中建立一個正則表達式並解析下面的字符串來實現單個模塊。的一些字符串格式正則表達式和解析重複相同的組總是

例子:()=>組

  1. STR1 =(A & & B)|| (C || d)& &!(E || F)

    O/P陣列=(組1,||,組2,& &,組3)

  2. STR2 =!(A ||乙)& &(C || d)& &(E & & F)

    O/P陣列=(組1,& &,組2,& &,組3)

  3. str3 =!(A || B)

    O/P陣列=(組1)

  4. STR4 =(A & & B)

    O/P陣列=(組1)

  5. STR5 =(A || B)

    O/P陣列=(組1)

  6. STR5 =(A & & B)

    O/P陣列=(組1)

總之,這些基團可以是任何順序或存在用於每個組內的數據沒有限制。

組1:(A & &乙& &Ç& & ...... n)的

第2組:(A || ||乙Ç|| ...... n)的

第3組:(A || ||乙ç|| ...... N)

預先感謝。如果需要,我可以發佈我現在的東西?

回答哪個起作用了:'/(!?\(.*?\))| \ | \ || & & /」

但它給我用於下面的實施例的錯誤,其中只有一個基團,其是W/O型括號:

  1. STR1 = A & &乙

    O/P排列的1組=(沒有括號),其中組1 = & &乙

  2. STR2 = A || B || C

    O/P array = group1(no括號)其中group 1 = A || B || C

+1

是的,你應該總是發佈你的相關嘗試,否則這個問題可能會很快關閉。 – kapa 2013-03-06 21:54:55

+1

通常,正則表達式只能描述[常規語言](http://en.wikipedia.org/wiki/Regular_language)。你的語言不是常規的,而是[context-free](http://en.wikipedia.org/wiki/Context-free_language)。所以你可能需要編寫你自己的解析器。 – Gumbo 2013-03-06 22:06:59

+0

嵌套與正則表達式的瘋狂(它驗證輸入,所以它比正常長),只是爲了演示它是可能的,但不推薦:http://stackoverflow.com/questions/15233953/php-split-string-on-逗號但不是在大括號或引號之間/ 15235628#15235628 – nhahtdh 2013-03-06 22:51:06

回答

0

我不清楚你爲什麼期待!放在你的例子3中。我會假定你實際上是指那個人的O/P陣列是一個group3。我可以建議,將來您會顯示示例輸入的實際輸出。總之,根據你放什麼,再加上我的假設,似乎這可以做你想做的:

preg_match_all('/(!?\\(.*?\\))|\\|\\||&&/', $str, $matches); 

其中$str是你的輸入格式。

+0

嗨,感謝您的回答,它確實有效。我很抱歉,但我忘記提及另一個條件,我的代碼目前正在打破。如果你還可以添加,我將不勝感激。我在我的問題中附加了更多條件。 – user1704440 2013-03-13 20:23:25

+0

你不能只在沒有的情況下添加括號嗎? – 2013-03-19 21:10:59

+0

我這樣做了..這將工作,如果沒有括號,就像str1 = A || B或str2 = A || B && C ...但不適用於str1 =(A ||(B)&& C)因爲正則表達式總是在每個組的周圍尋找一些括號 – user1704440 2013-03-24 06:05:12