Preg_split 从右到左匹配预设实例数

Preg_split matching preset number of instances from right to left

我希望正则表达式中有一些方法可以通过从右到左计数来匹配某些字符。

我有一个像下面这样的文本,其中的字段不一致,只是它们由空格分隔,但名称除外,它的空格数不确定。没有封闭标记。

NAME WITH SPACES FIELD1 FIELD2 FIELD3 FIELD4
SECOND NAME WITH SPACES FIELD1 FIELD2 FIELD3 FIELD4
THIRD NAME WITH SPACES FIELD1 FIELD2 FIELD3 FIELD4
FOURTH NAME WITH SPACES FIELD1 FIELD2 FIELD3 FIELD4
FIFTH NAME WITH SOME MORE SPACES FIELD1 FIELD2 FIELD3 FIELD4

我需要使用最后 4 个空格来获取列值并使用剩下的作为名称来拆分它。我将通过拆分所有空格并使用数组中的最后 4 个值来做到这一点,但是没有办法用正则表达式来做到这一点,我可以用最后四个空格拆分行吗?我想在这种情况下它会从右向左看。

此特定项目 php 使用 PCRE。

您可以使用 RegEx 这样做。

\s是空格,\S是非空格,$表示行或字符串的结尾。

<?php

$str = "NAME WITH SPACES FIELD1 FIELD2 FIELD3 FIELD4";

preg_match("/(\S+)\s(\S+)\s(\S+)\s(\S+)$/", $str, $matches);

var_dump($matches);

/* OUTPUT:

array(5) {
  [0]=>
  string(27) "FIELD1 FIELD2 FIELD3 FIELD4"
  [1]=>
  string(6) "FIELD1"
  [2]=>
  string(6) "FIELD2"
  [3]=>
  string(6) "FIELD3"
  [4]=>
  string(6) "FIELD4"
}

*/