2016-03-12 40 views
2

我需要从字符串中提取2个部分,并将它们放入数组中。PHP正则表达式使用preg_split

$test = "add_image_1"; 

我需要确保此字符串以“add_image”开始,以“_1”结尾但只能存储在最后的数字部分。我想使用preg_split作为学习经验,因为我将来需要使用它。

我不知道如何使用这个功能来找到一个确切的词(我尝试使用“\ b”和故障),我用“\ w +”来代替:

$result = preg_split("/(?=\w+)_(?=\d)/", $test); 
print_r($result); 

该作品除了它也接受一堆其他无效格式,如: “add_image_1_2323”。我需要确保它只接受这种格式。最后一位数字可以大于1位数字。

的结果应该是:

Array ( 

    [0] => add_image 

    [1] => 1 

) 

我怎样才能让这个更安全?

+0

'preg_split'是不检查的格式工具。 'preg_match'更适合此任务,并且如果要提取部件,请使用捕获组。 –

回答

1

以下正则表达式检查add_image作为字符串的开头,并在数字前匹配_

正则表达式:(?<=add_image)_(?=\d+$)

说明:

  • (?<=add_image)向后看的add_image

  • (?=\d+$)展望为这是字符串的结束和匹配_号。

Regex101 Demo

+0

啊所以这就是你如何查找确切的单词,谢谢!我使用这一切都是错误的。 – Mayron

+0

@Mayron:是的!你正在使用'\ w +'这意味着字符类'[A-Za-z0-9_]'中的任何东西重复了几次。 –

+0

除此之外,我确保一旦在'_'之后遇到一个数字,就不会有其他的'character'通过'$'标记字符串的结尾。所以像'add_image_1_23','add_image_9sd'这样的模式根本就不会匹配。 –