正则表达式的PHP子字符串匹配,并且正则表达式不总是工作
我正在尝试创建一个类似BBCode的html解析器。 例如,我想用以下格式解析html文本中的项目:正则表达式的PHP子字符串匹配,并且正则表达式不总是工作,php,regex,Php,Regex,我正在尝试创建一个类似BBCode的html解析器。 例如,我想用以下格式解析html文本中的项目: …html。。。。。[一] Item1[/I]…html…[I]Item2[/I]… 因此,我使用正则表达式来获取[I]XXXXX[/I]我还希望正则表达式只返回Item1,以避免str\u replace。目前,我正在使用str\u将[I]替换为”,将[/I]替换为”,以获取项目1。问题是正则表达式并不总是有效。 我正在使用下面的代码: $pattern="/\[I]([^\[].)+\[\/
…html。。。。。[一] Item1[/I]…html…[I]Item2[/I]…
因此,我使用正则表达式来获取
[I]XXXXX[/I]
我还希望正则表达式只返回Item1,以避免str\u replace
。目前,我正在使用str\u将[I]
替换为”
,将[/I]
替换为”
,以获取项目1。问题是正则表达式并不总是有效。我正在使用下面的代码:
$pattern="/\[I]([^\[].)+\[\/I]/m";
preg_match_all($pattern,$string,$out,PREG_SET_ORDER);
foreach($out as $i)
{
$temp=$i[0];
echo "Found!";
$i[0]=str_replace("[I]","",$i[0]);
$i[0]=str_replace("[/I]","",$i[0]);
......
}
我的正则表达式的意思是:以[I]
开始,以[
(为了避免[I][/I][/I][/I]
)以外的任何字符继续,以[/I]
结束。一些字符串失败,例如aaaaaaa
,其他字符串也被找到了!也许有更好的方法来创建这样的html解析器?谢谢大家! 编辑:好的,我找到了解决方案,但我不明白为什么这不起作用! 解决方案是
$pattern='\[i\](.*?\[/i\].\is'
,但有什么区别
编辑2:袭击者是正确的主要问题是
([^\[)+]
。这将创建语言[I](a)^2n[/I]
,因此它将匹配[I]aa[/I]
,但不匹配[I]aaaaaa[/I]
!尝试使用类似的方法:
$parsed_str = '[I]Item1[/I].....html....[I]Item2[/I].....';
preg_match_all('~\[I\]([^\[.]+?)\[\/I\]~i', $parsed_str, $result);
print_r($result[1]);
以下给出了相同的结果:
preg_match_all('~\[I\]([^\[].+?)\[\/I\]~i', $parsed_str, $result);
尝试使用类似以下内容:
$parsed_str = '[I]Item1[/I].....html....[I]Item2[/I].....';
preg_match_all('~\[I\]([^\[.]+?)\[\/I\]~i', $parsed_str, $result);
print_r($result[1]);
以下给出了相同的结果:
preg_match_all('~\[I\]([^\[].+?)\[\/I\]~i', $parsed_str, $result);
我认为你的子模式
([^\[])+
是问题所在。试试([^\[]+)
我认为你的子模式([^\[])+
是问题所在。试试([^\[])你的问题已经解决了
$temp=$i[0];
索引0包含整个匹配的模式。相反,您需要使用索引1-regexp的第一个括号部分:
$temp = $i[1]
你的问题已经解决了
$temp=$i[0];
索引0包含整个匹配的模式。相反,您需要使用索引1-regexp的第一个括号部分:
$temp = $i[1]
嗯……你是对的,我无意中创造了兰格[i](aa)^n[/i]!嗯……你是对的,我无意中创造了兰格[i](aa)^n[/i]!