我整个下午都在谷歌上搜索这个regex行为。
$str = ' b c d w i e f g h this string';
echo preg_replace('/'s[bcdefghjklmnopqrstuvwxyzBCDEFGHJKLMNOPQRSTUVWXYZ]{1}'s/', ' ', $str);
我想单独删除单个字符的所有实例(a和I除外),并在其位置保留一个空格。此代码似乎适用于每隔一场比赛。我怀疑这是因为比赛互相重叠。
我怀疑在这里进行环视是合适的,但我以前从未使用过它们,可以使用片段。
编辑:只是为了避免对我正在努力实现的目标感到困惑。我想把上面的字符串变成这个:
$str = ' i this string';
请注意,所有不是"A"或"I"的单字母字符都已删除。
您可以使用环视。它们是0长度的匹配,因此不会占用空间。{1}
在那里真的很荒谬,你可以把它去掉
echo preg_replace('/(?<='s)[bcdefghjklmnopqrstuvwxyzBCDEFGHJKLMNOPQRSTUVWXYZ](?='s)/', '', $str)
您可以在这里使用范围和不区分大小写的标志(?i)
,以减少键入所有这些字符的痛苦:
echo preg_replace('/(?i)(?<='s)[B-HJ-Z](?='s)/', '', $str)
或者单词边界也可以在这里工作:
echo preg_replace('/(?i)'b[B-HJ-Z]'b/', '', $str)
你可以试试这个:
/(?<='s)[b-hj-zB-HJ-Z](?='s)/
或者如果不需要CCD_ 3和CCD_。
您可以使用这个:
echo preg_replace('~(?i)'b[B-HJ-Z]'b~', ' ', $str);
注意:我不使用空格来分隔单个字母,而是使用单词边界,即[a-zA-Z0-9_]
中的一个字符和另一个字符之间的零宽度限制。这比空格更通用,包括(例如)标点符号。