2013-03-06 28 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