Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从strps值数组中提取子字符串_Php_Arrays_Strpos - Fatal编程技术网

Php 从strps值数组中提取子字符串

Php 从strps值数组中提取子字符串,php,arrays,strpos,Php,Arrays,Strpos,我有以下字符串 $string = "Hello World!<br />- 8/7/2013<br />Content<br />- 8/6/2013<br />Hello World"; $string=“Hello World!-8/7/2013内容-8/6/2013Hello World”; 我想提取破折号+空格(“-”)和下一个换行标记之间的所有信息。可能吗?我已经研究谷歌好几个小时了,但运气不好。我想我需要一个“-”的strpo数组

我有以下字符串

$string = "Hello World!<br />- 8/7/2013<br />Content<br />- 8/6/2013<br />Hello World";
$string=“Hello World!
-8/7/2013
内容
-8/6/2013
Hello World”;

我想提取破折号+空格(“-”)和下一个换行标记之间的所有信息。可能吗?我已经研究谷歌好几个小时了,但运气不好。我想我需要一个“-”的strpo数组和下面的换行标记,然后对它们进行批处理。当然,如果你能以其他方式做到这一点,我将不胜感激

正则表达式将为您提供最大的控制能力,但下面是一个使用strpos和substr的快速演示,它可以满足您的要求:

$strStart = strpos($string, '- ');
$strLength = strpos($string, '<br') - $strStart;
substr( $string, $strStart, $strLength );
$strStart=strpos($string,'-');

$strLength=strpos($string,“我已经更新了我的答案以处理多个事件。

您可以使用简单的正则表达式执行此操作:

preg_match_all("@- (.*)<br />@U", $string, $matches);
print_r($matches[1]);

这将模式
-(.*)
(.*)
匹配,表示任何内容。此处的
@
用作分隔符,用修饰符分隔实际模式(在本例中,
U
表示非快速匹配).

这是可能的。首先,对于
'-'
,您可以
strpos
,然后对于
'@zerkms,您确定这在存在多个实例的情况下是可能的吗?我不想要第一个,我想要提取所有子字符串。谢谢!是的,您可以在循环中这样做。一个一个地出现。如果您不知道正则表达式,那就不可能了他执行起来既简单又琐碎solution@David您说要匹配所有事件,但在您的示例中只有一个事件。第二个日期的前缀不是“
-
”,而只是“
-
”@kba对此表示抱歉--修复了太多的问题!我有一个问题:当我编写$match[1],它确实返回子字符串的第一个匹配项,我认为它应该返回第二个匹配项,它不会。有什么解决方案吗?Teriffic,谢谢!这很有帮助。最终我想在原始字符串中找到匹配项,并在每个子字符串的前端添加一个加粗标记+一个加粗标记。你认为有可能吗?是的,你可以这样做你应该先问一下::-
$string=preg\U replace(“@-(.*)
@U”,“-$1
”,“$string”)。你说得对——很抱歉——我没有太多使用堆栈溢出,但下次我会先问这个问题!不管怎样,这到底是怎么回事?当我有完整的代码时,有两个$string变量$string=“Hello World!
-8/7/2013
Content
-8/6/2013
Hello World”$string=preg_replace(“@-(.*)
@U”,”-$1
,$string);打印($matches[1]);是,
$string
是输入数据。在执行$string=preg_replace(…);`,日期将以粗体显示。试试看。
Array
(
    [0] => 8/7/2013
    [1] => 8/6/2013
)