在第一次出现整数之前提取一段字符串

时间:2016-01-15 04:33:01

标签: php regex

我正在制作一个Php脚本。但不幸的是我在REGEX部分真的很穷。我想提取这样的东西。

我给的字符串是:

  

Hello World! 2016祝您有个美好的一天!

现在,我希望将其拆分为数组

  

{“1”:“Hello World!”,“2”:“祝你有个美好的一天!”}

我想在遇到整数时将它分开。它只是,我需要一个正则表达式。有人可以帮我解决这个问题吗?另外,请建议我一些可以帮助我学习REGEX的链接。非常感谢你。

2 个答案:

答案 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!