用十进制数字 PHP 拆分字符串


Split string by decimal numbers PHP

我有一个这样的字符串:

1.1 Apoyar en la planeación y realización de procedimientos para el mantenimiento de la instrumentación y equipo automatizados.(杰菲· MANTENIMIENO ELECTRÓNICO, ELÉCTRICO E INSTRUMENTACIÓN.)

2.1 超级签证 Que los equipos electrónicos e instrumentación estén trabajando correctamente (JEFE DE MANTENIMIENO ELECTRÓNICO, ELÉCTRICO E 乐器)

如何在 php 中拆分它以获得数组或元组,例如:

[0] => 1.1

[1]=> Apoyar en la planeación y realización de procedimientos para el mantenimiento de la instrumentación y equipo automatizados.(JEFE DE MANTENIMIENO ELECTRÓNICO, ELÉCTRICO E INSTRUMENTACIÓN.)

[0]=>2.1

[1]=>Supervisar que los equipos electrónicos e instrumentación estén trabajando correctamente (JEFE DE MANTENIMIENO ELECTRÓNICO, ELÉCTRICO E INSTRUMENTACIÓN.)

或类似的东西:

[0]=>1.1

[1]=>Apoyar en la planeación y realización de procedimientos para el mantenimiento de la instrumentación y equipo automatizados.(JEFE DE MANTENIMIENO ELECTRÓNICO, ELÉCTRICO E INSTRUMENTACIÓN.)

[2]=>2.1

[3]=>Supervisar que los equipos electrónicos e instrumentación estén trabajando correctamente (JEFE DE MANTENIMIENO ELECTRÓNICO, ELÉCTRICO E INSTRUMENTACIÓN.)

我一直在尝试使用正则表达式preg_split类似于 [[0-9] 的东西。+但我不知道是否有可能。感谢您的帮助。

> 满足preg_split:

$testString = '1.1 That big array of 2.1 data which is separated by 2.3 some text';
$testChunks = preg_split('/'s*('d+'.'d+)'s*/', $testString, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
print_r($testChunks);

这是一个代码板示例。

您可以使用preg_split几乎按任何模式拆分字符串。

// not tested
preg_split( '/[0-9]{1-99}'.[0-9]{1-99}/', $input );

正如 wrikken 评论的那样,preg_splitPREG_DELIM_CAPTURE应该这样做:

preg_split('/'s*('d+'.'d+)'s*/', $subject, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

我还添加了PREG_SPLIT_NO_EMPTY,因为您可能会得到空的(例如开头的空字符串),并且此标志可以防止这种情况。

演示

快速而肮脏的preg_split:

$result = preg_split('/([0-9]+.[0-9]+)/',$text,-1,PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
$items = array();
for($i=0;$i<count($result);$i++) {
    if ($i%2===0) {
        $items[$result[$i]] = $result[$i+1];
        $i++;
    }
}
print_R($items);