PHP 中 preg_replace 的正则表达式

问题描述 投票:0回答:4

我有这样的字符串(一些例子):

 F7998FM3213/02F
 J442554NM/05
 K439459845/34D

我需要使用带有

preg_replace
和正则表达式的 PHP 来删除任何字符串中正斜杠“/”之后的所有非数字字符。

例如上面的代码之后看起来像这样:

F7998FM3213/02
J442554NM/05
K439459845/34
php regex preg-replace expression
4个回答
1
投票

如果您追求可读性,这样的东西将是完美的:

$parts = explode("/",$line,2);
$parts[1] = preg_replace("/\D/","",$parts[1]);
$output = implode("/",$parts);

但是,为了简洁起见并完全基于您给出的示例,请尝试以下操作:

$output = preg_replace("/\D+$/","",$input);

这将从字符串末尾删除所有非数字字符,根据您的示例,这似乎就是您所追求的。


1
投票

你可以使用这个:

$subject = <<<LOD
F7998FM3213/02F
J442554NM/05
K439459845/34D
K439459845/34D34
LOD;

echo preg_replace('~^[^/]*+/\K|[^\d\n]++~m', '', $subject);

说明:

正则表达式是两件事之间的交替:

  1. 您匹配开头,直到遇到
    /
    包括
  2. /
    之后的部分即不是数字或换行一次或多次

由于首先检查字符串的开头,因此所有非数字字符都将在/

之后被删除
    


0
投票
\D

之后任意位置的所有

/
,您可以替换:

(?:/\K|\G(?!^))(\d*)\D+

$1

。喜欢:


preg_replace(',(?:/\K|\G(?!^))(\d*)\D+,', '$1', $str);


                

0
投票

代码:(

演示

$strings = [ 'F7998FM3213/02F', 'J442554NM/05', 'K439459845/34D', 'FOO007/1A2B3CD45EFG6', ]; var_export( preg_replace( '#(?:[^/]*/|\G(?!^))\d*\K\D+#', '', $strings ) );

输出:

array ( 0 => 'F7998FM3213/02', 1 => 'J442554NM/05', 2 => 'K439459845/34', 3 => 'FOO007/123456', )

	
© www.soinside.com 2019 - 2024. All rights reserved.