我想根据以下规则中断字符串:
- 所有连续的字母数字字符加上点(
.
)必须作为一个部分处理 - 所有其他连续字符必须作为一个部分处理
1
和2
的连续组合必须被视为不同的部分- 不得返回空白
例如这个字符串:
Method(hierarchy.of.properties) = ?
应返回此数组:
Array
(
[0] => Method
[1] => (
[2] => hierarchy.of.properties
[3] => )
[4] => =
[5] => ?
)
我使用preg_split()
不成功,因为AFAIK不能将模式视为要返回的元素。
有没有一个简单的方法可以做到这一点?
您可能应该使用preg_match_all而不是preg_split。
preg_match_all('/[w|.]+|[^ws]+/', $string, $matches);
print_r($matches);
输出:
Array
(
[0] => Array
(
[0] => Method
[1] => (
[2] => hierarchy.of.properties
[3] => )
[4] => =
[5] => ?
)
)
这应该可以实现您想要的:
$matches = array();
$string = "Method(hierarchy.of.properties) = ?";
foreach(preg_split('/(12|[^a-zA-Z0-9.])/', $string, 0, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY) as $match) {
if (trim($match) != '')
$matches[] = $match;
}
我使用了一个循环来删除所有的空白匹配,因为据我所知,preg_split()中没有适合您的功能。