我正在制作一个Php脚本。但不幸的是我在REGEX部分真的很穷。我想提取这样的东西。
我给的字符串是:
Hello World! 2016祝您有个美好的一天!
现在,我希望将其拆分为数组
{“1”:“Hello World!”,“2”:“祝你有个美好的一天!”}
我想在遇到整数时将它分开。它只是,我需要一个正则表达式。有人可以帮我解决这个问题吗?另外,请建议我一些可以帮助我学习REGEX的链接。非常感谢你。
答案 0 :(得分:1)
最简单的方法是使用preg_split()
。显而易见的是(用正则表达式模式分割字符串),它产生的输出非常符合你的要求:
php > $s = "Hello World! 2016 Have a nice day ahead!";
php > $pattern = "/\s+\d+\s+/";
php > $a = preg_split($pattern, $s);
php > print_r($a);
Array
(
[0] => Hello World!
[1] => Have a nice day ahead!
)
唯一的区别是你的问题要求基于1的索引,而这个答案提供了基于0的索引。您应该更喜欢基于0的索引,因为这是PHP序列的默认值,即数组,字符串等。
提供资源链接超出了SO的范围,但是,您可以尝试:
或通过简单的谷歌搜索即可获得的数十万人中的任何一个。
或者,如果您知道分隔字符串的字面值,则可以使用explode()
:
php > $s = "Hello World! 2016 Have a nice day ahead!";
php > $delimiter = " 2016 ";
php > $a = explode($delimiter, $s);
php > print_r($a);
Array
(
[0] => Hello World!
[1] => Have a nice day ahead!
)
答案 1 :(得分:1)
/^([\D]+)\s+\d+\s+(.*)$/
应该这样做。
你得到所有非数字,然后是周围有空白区域的数字,然后是其他数字。
全部放在一起:
$string = 'Hello World! 2016 Have a nice day ahead!';
preg_match('/^([\D]+)\s+\d+\s+(.*)$/', $string, $match);
// $match[1]: Hello World!
// $match[2]: Have a nice day ahead!