我有一个字符串:
$s = "I am not foo+bar";
我想删除从字符串开头到字$s
的"foo+"
的第一部分,因此它变为“我不是foo + < / strike> bar“:
$s == "bar"
如何使用PHP实现这一目标?
编辑:我在字符串中有一个“+”符号。为什么preg_replace
没有取代它?我使用的模式是/^(.*?\bfoo+)\b/
。有什么想法吗?
答案 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
+