2016-06-01 102 views
0

部分我有一个字符串:删除字符串的从开始到某些字

$s = "I am not foo+bar"; 

我想删除的$s从字符串的开头开始的第一部分,直到字"foo+"所以就变成了“ 我不是foo + 栏”:

$s == "bar" 

我怎样才能做到这一点用PHP?

编辑:我在字符串中有一个“+”号。为什么preg_replace没有取代它?我用过的模式是/^(.*?\bfoo+)\b/。有任何想法吗?

+0

你尝试过什么,什么没有奏效?你看过php字符串函数吗?特别是str_replace和strpos - http://php.net/manual/en/ref.strings.php – theatlasroom

+0

我做了,但我无法弄清楚如何在我想删除的部分包含单词“foo”! –

+0

如果没有看到您尝试过的代码,无法真正帮助您。使用您尝试过的一些代码无法更新问题。另一种方法可能是使用以空格作为分隔符的分隔符来将字符串拆分为数组,然后比较数组中的每个元素,然后将剩下的内容重新插入到字符串中。 – theatlasroom

回答

2

你应该能够使用正则表达式来查找一切,直到某个单词。对于你的例子,

/^(.*?\bfoo)\b/ 

应与preg_replace一起使用。
^确保我们从字符串的开头开始。
.*?是任何东西(不包括新行加上s修饰符以允许新行),直到第一个foo

简而言之:\ b允许您以\ bword \ b的形式使用正则表达式执行“仅限整个词”搜索。 “单词字符”是可以用于形成单词的字符。所有不是“单词字符”的字符都是“非单词字符”。

- http://www.regular-expressions.info/wordboundaries.html

正则表达式演示:使用preg_quotehttps://regex101.com/r/gJ3nS7/3

粗糙未经检验的替代例子。

preg_replace('/^(.*?\b' . preg_quote('foo', '/') . '\b/', '', $s); 

更长例如+是一个特殊的性质,而且是一个非字字符,这样\b将无法​​正常工作尾随。你可以把+放到一个可选的分组中,边界词应该可以工作。

https://regex101.com/r/gJ3nS7/5

/^(.*?\bfoo(?:\+|\b))/ 
+0

你不需要使用正则表达式来处理所有事情。此外,问题要求“foo”的位置,而不是“bar” –

+0

@RobbieAverill没关系,反转这个词。正则表达式仍然需要。根据你的回答,你没有找到第一个“foo”作为单词https://eval.in/580864。 – chris85

+0

然后在两边找空格来替代,你不需要正则表达式:) https://eval.in/580865 –

相关问题