如何从php字符串中提取某些单词?

时间:2019-06-06 06:07:21

标签: php string

我有一个长字符串,例如I1:1;I2:2;I8:2;NA1:5;IA1:[1,2,3,4,5];S1:asadada;SA1:[1,2,3,4,5];SA1:[1,2,3,4,5];。现在我只想获取某些单词,例如'I1','I2','I8','NA1'等,即':'&';'之间的单词仅将它们存储在数组中。如何有效地做到这一点?

我已经尝试使用preg_split(),它可以工作,但是输出错误。如下所示。

// $a is the string I want to extract words from
$str = preg_split("/[;:]/", $a);
print_r($str);

我得到的输出是这个

Array
(
    [0] => I8
    [1] => 2
    [2] => I1
    [3] => 1
    [4] => I2
    [5] => 2
    [6] => I3
    [7] => 2
    [8] => I4
    [9] => 4
    [10] => 
)
Array
(
    [0] => NA1
    [1] => 5
    [2] => 
)
Array
(
    [0] => IA1
    [1] => [1,2,3,4,5]
    [2] => 
)
Array
(
    [0] => S1
    [1] => asadada
    [2] => 
)
Array
(
    [0] => SA1
    [1] => [1,2,3,4,5]
    [2] => 
)

但是我期望'I8','I1','I2','I3','I4'也在位置为[0]的单独数组中。有关如何执行此操作的任何帮助。

3 个答案:

答案 0 :(得分:0)

一种可能的方法是结合使用explode()implode()。结果以字符串形式返回,但是例如,您可以轻松地将其放入数组中。

<?php
$input = "I1:1;I2:2;I8:2;NA1:5;IA1:[1,2,3,4,5];S1:asadada;SA1:[1,2,3,4,5];SA1:[1,2,3,4,5];.";
$output = array();

$array = explode(";", $input);
foreach($array as $item) {
   $output[] = explode(":", $item)[0];
}    

echo implode(",", $output);
?>

输出:

I1,I2,I8,NA1,IA1,S1,SA1,SA1,.

答案 1 :(得分:0)

您可以尝试类似的事情。

<div class="container">
  <h2>This is heading <span class='heading-border'>this is stylish heading line</span></h2>
</div>

答案 2 :(得分:0)

您可以使用preg_match_all()进行贪婪匹配以匹配;:之间的项目

<?php

$str = 'I1:1;I2:2;I8:2;NA1:5;IA1:[1,2,3,4,5];S1:asadada;SA1:[1,2,3,4,5];SA1:[1,2,3,4,5];';

preg_match_all('/;(.+?)\:/',$str,$matches);

print_r($matches[1]);

实时演示: https://3v4l.org/eBsod