我想知道是否有人可以帮助我
我有这段代码在[回复]
之间获取一些文字$msg = '> **
> <#1371620c479a4e98_> Chauffeure -Emails driver_age:72
> driver_nationality:IN
> driver_languages:French,
> driver_name:Rinto George
> driver_mobilenumber:9747 161861
> driver_email:rinto@example.com[reply]I am a principal yes , I know
> you[reply] Fragen oder Hilfe benotigt?
> 089-38168530 Secure Transmission of Sensitive Data by SSL
>';
使用过的代码
preg_match_all("/\[reply](.*)\[reply]/", $msg, $reply);
print_r($reply)
但它不会输出我想要的输出
建议
如果您可以使用[回复]进行排序,请回复此处[/ reply]会更好,因为我正在使用[回复] [回复],看起来不太好
答案 0 :(得分:0)
你不想要正则表达式。虽然你可以通过简单的正则表达式(例如发布的webbandit)完成最基本案例的尝试,但它会打破更复杂的例子(如我的评论中的那个)。
这可以通过更好的正则表达式和前瞻来解决,但这不是你想要的。你正在进行字符串匹配,你应该使用有限的机器来解决这个问题。 PHP的字符串算法可以为您提供快速而肮脏的功能,例如。
<?php
$text = "[reply] something [reply] bla bla bla [reply] something else [reply]";
$matches = array();
$lastMatch = 0;
$matchCount = 0;
$search = "[reply]";
while(true) {
$thisMatch = strpos($text, $search, $lastMatch+1);
if($thisMatch === FALSE)
break;
if(++$matchCount % 2 == 0)
{
$lastMatch = $thisMatch;
continue;
}
//print substr($text, $lastMatch + strlen($search), $thisMatch - $lastMatch - strlen($search)) . "\n";
array_push($matches, substr($text, $lastMatch + strlen($search), $thisMatch - $lastMatch - strlen($search)));
$lastMatch = $thisMatch;
}
print_r($matches);
?>
将在$matches
中为您提供一系列回复。
输出:
[mqudsi@iqudsi:~/Desktop]$ php reply.php
Array
(
[0] => something
[1] => something else
)
对于[reply]
和[/reply]
的修订问题,解决方案在此处:
$text = "[reply] something [/reply] bla bla bla [reply] something else [/reply]";
$matches = array();
$end = -1;
while(true) {
$start = strpos($text, "[reply]", $end+1);
$end = strpos($text, "[/reply]", $start+1);
if($start === FALSE || $end === FALSE)
break;
array_push($matches, substr($text, $start + strlen("[reply]"), $end - $start - strlen("[reply]")));
$lastMatch = $thisMatch;
}
答案 1 :(得分:0)
取正则数组结果的正则表达式过滤器/\[reply\].*/
会给你你想要的东西
这里是结果
Array
(
[0] => Array
(
[0] => [reply]I am a principal yes , I know
[1] => [reply] Fragen oder Hilfe benotigt?
)
)
答案 2 :(得分:0)
Dunno为什么Gokhan删除了他的答案,但这是正确的答案。
"~\[reply](.*?)\[/reply]~is"
您需要的唯一两件事是s
修饰符,它告诉regexp将表达式应用于整个文本,而不是单独的每个字符串(默认情况下)
和贪婪限制器?
答案 3 :(得分:-1)
正则表达式是:/\[reply\]([^\[]+)\[\/reply\]/g