具有正则表达式的PHP字符串到数组返回带分隔符

时间:2018-06-18 14:38:41

标签: php regex

这是我的字符串,单个字符串中非常友好的错误。

  

第1行的服务代码名称不能为空。

     

第2行的服务代码名称不能为空。

     

服务代码名称不能   第3行空了。

     

第4行的服务代码名称不能为空。

     

在   第5行的服务代码名称不能为空。

     

服务代码名称   在第6行不能为空。

     

服务代码名称不能为空   第7行。

     

第8行的服务代码名称不能为空。

     

第36行的服务代码名称不能为空。

我可以使用此正则表达式exspression对事件进行计数:'/line \d{1,}./'

使用以下代码。

$regexStr = '/line \d{1,}./';
$occurences = preg_match_all($regexStr, $str, $matches);

但是我想用分隔符返回数组。 例如:

- The service code name can not be empty at line 1.
- The service code name can not be empty at line 2.
- The service code name can not be empty at line 5.

我尝试使用

$result = preg_split($regexStr, $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

没有任何喜悦,这只是返回没有分隔符的字符串。

另外,如果您是正则表达式专家,您能告诉我如何排除介绍,,如果它是字符串的开头 - 非常有用!

我认为这样做的方法是使用preg_match_all()并在方法的参数3上配置$output。但是,我认为我的regex错误,它不包括前进位?

非常感谢提前。

1 个答案:

答案 0 :(得分:4)

您可以在此正则表达式中使用preg_match_all

/\w.+?line \d+\./

此正则表达式从单词字符开始匹配,匹配到1+位后跟一个点。

RegEx Demo

<强>代码:

if (preg_match_all('/\w.+?line \d+\./', $str, $m))
    print_r($m[0]);                                                                        

Array
(
    [0] => The service code name can not be empty at line 1.
    [1] => The service code name can not be empty at line 2.
    [2] => The service code name can not be empty at line 3.
    [3] => The service code name can not be empty at line 4.
    [4] => The service code name can not be empty at line 5.
    [5] => The service code name can not be empty at line 6.
    [6] => The service code name can not be empty at line 7.
    [7] => The service code name can not be empty at line 8.
    [8] => The service code name can not be empty at line 36.
)