Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP返回测试正则表达式中未捕获的行_Php_Regex - Fatal编程技术网

PHP返回测试正则表达式中未捕获的行

PHP返回测试正则表达式中未捕获的行,php,regex,Php,Regex,我有这样一个文件: 我试图捕获第二列,该行以2341开头,在linux机器上使用PHP脚本 2341 92 2206 100 2594 15 但是,这将返回整个行。为什么它不给我一美元 $file_contents = file_get_contents("count.txt"); $file_contents = preg_replace("/2341\t(\d+?)/m", "$1", $file_contents, 1); echo $file_contents;

我有这样一个文件:

我试图捕获第二列,该行以2341开头,在linux机器上使用PHP脚本

2341    92
2206    100
2594    15
但是,这将返回整个行。为什么它不给我一美元

$file_contents = file_get_contents("count.txt");

$file_contents = preg_replace("/2341\t(\d+?)/m", "$1", $file_contents, 1);

echo  $file_contents;

您需要取出用于使多行字符串输入的每一行中的
^
$
匹配的
/m
标志。也使用
\s+
代替
\t

preg_replace("/2341\s+(\d+)/", "$1", $file_contents, 1);

您需要取出用于使多行字符串输入的每一行中的
^
$
匹配的
/m
标志。也使用
\s+
代替
\t

preg_replace("/2341\s+(\d+)/", "$1", $file_contents, 1);

您的文件包含空格,而不是制表符,因此正则表达式模式不匹配。改为使用
\s+
(这将匹配任何类型的空白字符,包括制表符)

您正在从原始文本中提取某些内容,而不是真正替换,因此可能更适合此任务。下面是如何将其与
preg\u match()配合使用的方法:


您的文件包含空格,而不是制表符,因此正则表达式模式不匹配。改为使用
\s+
(这将匹配任何类型的空白字符,包括制表符)

您正在从原始文本中提取某些内容,而不是真正替换,因此可能更适合此任务。下面是如何将其与
preg\u match()配合使用的方法:


但是当我在Notepad++中显示所有字符时,我看到它实际上是
2341[tab]92CRLF
@thomas:这可能是复制粘贴错误吗?我看到的是空格。不管怎样,正则表达式应该对两者都有效。区别在于:-。但当我在记事本++中显示所有字符时,我发现它实际上是
2341[tab]92CRLF
@thomas:这可能是复制粘贴错误吗?我看到的是空格。不管怎样,正则表达式应该对两者都有效。区别在于:-。
preg_match("/^2341\s+(\d+)$/m", $file_contents, $matches);
echo  $matches[1];