2013-04-30 174 views
0

我期待尝试结合2个正则表达式。结合2个正则表达式

$test = preg_replace('/\[.*?\]/', '', $test); 

我使用它来除去任何方括号和词语的括号之间..

$test = preg_replace ('/[\[\]=]+/', '', $test); 

我使用它来从我的字符串中去除任何= []符号。

单独做这件事似乎很好,但我想结合起来。 任何想法如何,我可以做到这一点。一切我已经尝试打破两..

感谢

+0

两者中的第一个将去掉方括号和它们之间的所有内容。第二个将删除'='符号。不确定这是否是你真正想要的,但为了将这两者结合起来,你可以使用'|'来表示_or_。 – 2013-04-30 08:03:09

+0

你首先执行哪一个?该订单将影响最终结果。 – nhahtdh 2013-04-30 08:20:01

回答

1

使用alternation

$test = preg_replace('/\[.*?\]|[\[\]=]/', '', $test); 

顺序是这里重要的,所以,在第一匹配的括号及其内容将被删除。只要没有嵌套括号,这应该可以正常工作。

所以,这个表达式将匹配\[.*?\]OR[\[\]=]

+1

我相信他有去除流浪(无与伦比的)括号 – Dave 2013-04-30 08:05:42

+0

@Dave,好吧,可以。我改变了一下我的答案。 – stema 2013-04-30 08:16:45

+0

这几乎是完美的:) 但是如果'$ test =“= [TEST] Wo = rd”'它返回'TESTWord'而不是'Word' 无论如何排序呢? – JeffVader 2013-04-30 08:58:03

1

简单的答案或者是使用一个或:

'/\[[^\]]*\]|[\[\]=]+/' 

注意,我还第一串中改变了内侧图案。我不确定是否需要反斜杠。

+0

这不像将2个正则表达式放在一起简单。你必须介意表达式中第一个出现的顺序,因为当你交换它们时,行为会有所不同。 – nhahtdh 2013-04-30 08:13:06

+0

@mhahtdh你能举个例子吗?在这种情况下,我想不出一个(他在擦除所有比赛) – Dave 2013-04-30 08:14:02

+0

'[abc]'就是一个很好的例子。只需在交替交换中对2件进行测试即可。 – nhahtdh 2013-04-30 08:18:05