从头开始删除字符串的部分直到某个单词

时间:2016-06-01 00:11:30

标签: php regex

我有一个字符串:

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

我想删除从字符串开头到字$s"foo+" 的第一部分,因此它变为“我不是foo + < / strike> bar“:

$s == "bar"

如何使用PHP实现这一目标?

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

1 个答案:

答案 0 :(得分:2)

你应该能够使用正则表达式找到所有内容直到某个单词。对于你的例子,

<xctk:DecimalUpDown ValueChanged="UpDownBase_OnValueChanged" Text="{Binding ServiceSize, Converter = { StaticResource DecimalUpDownValueConverter }}" Minimum="0" Grid.Column="4" Grid.Row="2"  Margin="5" IsEnabled="{Binding IsEditable}"/>

应与/^(.*?\bfoo)\b/ 一起使用。
preg_replace确保我们从字符串的开头开始。
^是任何内容(不包括新行添加.*?修饰符也允许新行,直到第一个s

  

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

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

正则表达式演示:https://regex101.com/r/gJ3nS7/3

使用foo的粗略未经测试的替换示例。

preg_quote

更长的例子,preg_replace('/^(.*?\b' . preg_quote('foo', '/') . '\b/', '', $s); 是一个特殊字符,但也是一个非单词字符,因此+将不起作用。您可以将\b放入带有边界一词的可选分组中,这应该有效。

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

+