2012-06-21 66 views
-2

所以有一个字符串,非常复杂的正则表达式

<?php 

$string = <<<STR 

/\[email protected]#$%^&*()?.,djasijdiwqpk,=-c./zcxzo123154897kp02ldz.,world90iops02&&&8ks 

STR; 

我要取代一切为NULL,除了词“世界”和数字1和3,

我只是想获得“world13”或“world31”使用正则表达式使用正则表达式

我已经通过strpos()和substr()实现了基本解决方案, ,并且这是工作的例外。但是,我需要通过正则表达式

做到这一点

的问题是:

是否可以提取使用正则表达式这个词?

+1

哪里'1'和'3'从哪里来? – zerkms

回答

1

~(world(?:(31|13))~i'i'使正则表达式不区分大小写。 ?:在那里,所以它不会将它放在单独的结果中的匹配数组中。顺便说一下,不会说这很复杂:)如果你想 1和3在那里,你可以使用~(world|1|3)~i

+0

你说谎!表达式不会从OP $'string'中提取字符串'world13'! – Qtax

+2

似乎不工作? http://rubular.com/r/pLQNJ5XFxT – furier

+0

@Qtax不,不会的,你完全正确。不过,我认为他确实想要“世界31”或“世界13”,而不是刻意抱怨他的例子字符串不正确。所以是的,他的问题可能会更好,但他的问题的解决方案似乎给出了。长大。 –

1

是否可以使用RegEx提取该单词?

是的。您可以使用此正则表达式:

(world) 

我知道,但我不能提取world13或world31

啊,我明白了!您可以使用:

$string = preg_replace('/.*/s', 'world13', $string); 
+0

是啊我知道,但是,我不能提取world13或world31 – Yang

+0

@metal_fan,我修正了它。 – Qtax

+2

精彩,但我建议将其简化为'$ string ='world13';' – zerkms

1

一个简单的解决方案是找到你需要的东西,然后将它们加入到一个字符串中。

preg_match_all('/world|[13]/', $string, $matches); 
$ret = join($matches[0]);