2

我正在尝试使用一个字符串,例如:

$search = "Bob Loblaw + Mark Hamill RT45_part12 foo_092344"

并删除所有非字母数字字符,除非下划线位于RT45_part12中。

我想要的结果应该是:

“Bob Loblaw Mark Hamill RT45_part12 foo 092344”

preg_replace("/[^A-Za-z0-9_]/", ' ', $search)

查找 RT45_part12 的正则表达式是

\b[a-zA-Z]{2,4}[0-9]{1,5}_part[0-9]{1,5}\b

我不知道如何将这两者结合起来,以便它跳过 RT45_part12 中的下划线,但在 derrick 之后替换下划线。我需要使用前瞻、后瞻功能吗?

4

2 回答 2

0

希望这有帮助

$search = "Bob Loblaw + Mark Hamill RT45_part12 foo_092_34_4";

echo preg_replace("/[^a-zA-Z0-9 ]|(RT45_part12)/", '$1', $search);

//Bob Loblaw  Mark Hamill RT45_part12 foo092344

或者

echo preg_replace("/[^a-zA-Z0-9 ]|([a-zA-Z]{2,4}[0-9]{1,5}_part[0-9]{1,5})/", '$1', $search);

更新(非字母数字字符到空格)(它只适用于 RT45_part12 之后有空格)

echo preg_replace("/[^a-zA-Z0-9 ]|([a-zA-Z]{2,4}[0-9]{1,5}_part[0-9]{1,5}) /", '$1 ', $search);
于 2013-04-24T02:53:30.973 回答
0

这限制够吗?

echo preg_replace ( "~[^\w ]++|_(?!part\d{1,5}\b)~i", " ", $mystring);

但是,如果您想确定,请使用:

echo preg_replace ( "~[^\w ]++|(\b[a-z]{2,4}\d{1,5}_part\d{1,5}\b)|_~i", "$1 ", $mystring);
于 2013-04-24T02:29:07.780 回答