2012-07-17 60 views
1

我想从一个更大的字符串($ str)中取出GP123(一个由数字和字符组成的字符串),并排除将成为另一个变量中的字符串的Hello($ str1)。 我的代码是这样的。但它不起作用。我怎样才能删除一部分字符串。如何在php中使用preg删除一部分字符串?

$str=" HelloGP123"; 
$str1="Hello"; 
preg_match_all("/(?:$str1)\w+\d+\w+/",$str,$str2); 
print_r($str2); 
+1

'preg_replace()'? – Spudley 2012-07-17 06:46:51

+0

所以你想要返回一个仅由字母数字字符构成的子字符串数组,但要排除忽略正在搜索的文本中给定字符串的任何部分的子字符串? – Braiba 2012-07-17 07:53:19

+0

是的,我只是想要GP123作为$ str2并排除你好。如何从$ str – 2012-07-17 09:01:31

回答

1

东西线内爆你的比赛以及我的需要只是擦除$ str(HelloGP123)中的$ str1(Hello)部分并将最后的余数存储在$ str2中。而我正在围绕正则表达式。

但我意识到这可以通过字符串替换更简单的方法解决。 所以这就是我所做的,它的工作。

$str2= str_ireplace($str1, '', $str); 

我想这是最简单的方法比通过尝试各种组合的正则表达式冲刺我们的大脑。

0
preg_replace("/hello/","","hellogp123"); 

为什么不上呢?

+0

中否定$ str1但是,如何使用变量来执行此操作。这个作品我知道,但假设我不知道GP123之前的术语Hello,但我知道它是变量$ str1的内容。然后 ?给模式赋一个变量不起作用 – 2012-07-17 09:25:40

+0

它会工作,请检查以下代码:$ str =“hello”; echo preg_replace(“/ $ str /”,“”,“hellogp123”);' – venkat 2012-07-17 14:21:29

0
$pattern = sprintf('/(?<=%s)[a-zA-Z0-9]+/', preg_quote($str1, '/')); 

if (preg_match($pattern, $str, $matches)) { 
    $str2 = $matches[0]; 
} 

这将匹配的字母和/或数字,但只有那些包含在$str1字符串紧随其后的任意组合。这里

示例 - http://codepad.viper-7.com/okY8TP

参见 - http://www.regular-expressions.info/lookaround.html

+0

不,我不想取代GP123但排除包含在变量$ str1中的Hello。新的结果,即GP123应该存储在$ str2中。再次查看我的代码。 – 2012-07-17 09:04:03

+0

@AlokKumar我已经更新了我的答案和工作示例 – Phil 2012-07-17 10:35:02

0
$string="HelloGP123"; 
$pattern="/Hello/"; 
echo preg_replace($pattern, "", $string); 
+0

但我该如何处理变量。这个作品我知道,但假设我不知道GP123之前的术语Hello,但我知道它是变量$ str1的内容。然后 ?为模式赋予变量不起作用 – 2012-07-17 09:24:45

0

有你的代码不能正常工作的几个原因:

  • 首先(?:$str1)实际上是试图匹配'你好'在字符串中。这是因为(?:)是一个非捕获子模式,其中不是意味着结果中的任何内容都不会返回(这似乎是您如何使用它),但子模式不返回作为它在比赛数组中的自己的条目。
  • \w+\d+\w+表示“一个或多个单词字符,后跟一个或多个数字,后跟一个或多个单词字符”,其中“单词”字符是字母,数字或下划线。这不是你说你想要匹配的东西。

下面是一些代码,会做你说的话:

$str_minus_str1 = preg_replace('/'.preg_quote($str1,'/').'/',' ',$str); 
preg_match_all('/[0-9A-Za-z]+/',$str_minus_str1,$matches); 

请注意,我把它换成$ STR1与“”的字符串,而不是删除它,因为如果$海峡是,例如,“applehellobanana”,你会想把'apple'和'banana'作为单独的匹配返回,而不是仅仅匹配'applebanana'。

如果你想返回整个事情作为一个单一字符串,这似乎是你的意图,那么你就需要沿着

$str2 = implode('',$matches);