2016-01-15 43 views
-1

我正在处理一个Php脚本。但不幸的是我在REGEX部分真的很穷。我想提取这样的东西。在首次出现整数之前提取一段字符串

我给该字符串是:

的Hello World! 2016祝你有美好的一天!

现在,我想它到一个数组拆分为

{ “1”: “世界,你好!”, “2”: “有一个漂亮的前一天”}

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

+0

1.为什么它必须是一个正则表达式? 2.你在拆分什么,固定字符串“2016”? – mhawke

+0

字符串2016未固定。它可以是任何整数。 –

+0

请将完整的规格 - 拆分的基础 - 添加到问题中。 – Praveen

回答

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

/^([\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! 
+0

非常感谢你!这是有道理的。 Bt我不会标记你的答案是正确的,直到我的两个问题都得到回答。 –

+0

@Milind使用http://regexone.com/和http://regexr.com/来学习正则表达式。 –

+0

我喜欢这张备忘单:http://www.cheatography。com/davechild/cheat-sheets/regular-expressions /,并通过https://regex101.com/进行快速测试 –

相关问题