Php 使用正则表达式对字符串进行除法
我想像Wordpress标签一样拆分字符串。 唯一的区别是我的标签将包含当前页面的标题。 例如 我有以下代码:Php 使用正则表达式对字符串进行除法,php,regex,Php,Regex,我想像Wordpress标签一样拆分字符串。 唯一的区别是我的标签将包含当前页面的标题。 例如 我有以下代码: $str = 'lorem<!--title1-->ipsum<!--title2-->dolor<!--title3-->sit<!--title4-->amet<!--title5-->consectetur'; $res = preg_split('/<\!--(.*?)-->/', $str, null,
$str = 'lorem<!--title1-->ipsum<!--title2-->dolor<!--title3-->sit<!--title4-->amet<!--title5-->consectetur';
$res = preg_split('/<\!--(.*?)-->/', $str, null, PREG_SPLIT_DELIM_CAPTURE);
我的目标是:
Array
(
[0] => Array
(
[0] => lorem
)
[1] => Array
(
[0] => title1
[1] => ipsum
)
[2] => Array
(
[0] => title2
[1] => dolor
)
[3] => Array
(
[0] => title3
[1] => sit
)
[4] => Array
(
[0] => title4
[1] => amet
)
[5] => Array
(
[0] => title5
[1] => consectetur
)
)
您可以将preg_match_all与以下正则表达式一起使用:
(?:<\!--(.*?)-->)?(.+?)(?=<!--|$)
最好将所有内容都放在问题中,而不是链接到可能消失的外部资源,从而使问题缺乏高质量的内容。所以我为你做了这件事就可以了,但如果我有字符串包含空格、制表符、换行符、点或任何其他特殊字符,这就不能很好地工作。我看到了\w的问题,不知道如何解决它。@user3054208:我用
(?:)([^]+)
更新了这个正则表达式,它将限制在
之外的部分。演示也更新了。@RiggsFolly:给你,我得吃完晚饭了:)我又发现了一个问题。字符串包含html标记时的情况。我试图否定第一组,但没有成功<代码>(?:)(?:(?!)。好吧,我猜这是(?:)(+?)(=
(?:<\!--(.*?)-->)?(.+?)(?=<!--|$)
<?php
$re = "/(?:<\\!--(.*?)-->)?(.+?)(?=<!--|$)/";
$str = "lorem<!--title1-->ipsum<!--title2-->dolor<!--title3-->sit<!--title4-->amet<!--title5-->consectetur";
preg_match_all($re, $str, $matches);
$arr = array();
$first = false;
for ($i = 0; $i < count($matches[0]); $i++) {
if ($first) {
array_push($arr, array($matches[1][$i],$matches[2][$i] ));
}
else {
$first = true;
array_push($arr, array($matches[2][$i]));
}
}
print_r($arr);
?>
Array
(
[0] => Array
(
[0] => lorem
)
[1] => Array
(
[0] => title1
[1] => ipsum
)
[2] => Array
(
[0] => title2
[1] => dolor
)
[3] => Array
(
[0] => title3
[1] => sit
)
[4] => Array
(
[0] => title4
[1] => amet
)
[5] => Array
(
[0] => title5
[1] => consectetur
)
)