我需要使用分隔符将字符串拆分为两个.我所要做的就是使用explode()函数......我知道.
但这是我正在尝试做的事情:我需要使用分隔符拆分字符串,但如果分隔符用引号括起来,则应该忽略它.
假设我的分隔符是连字符( - ),我需要拆分以下字符串:
"大黄色"的房子靠近湖边
第一个连字符必须被忽略,因为它在引号中,因此我最终会得到两个字符串,如下所示:
那个"大黄色"的房子
2.靠近湖边
它还应该能够检测到转义的报价.
例如:他不喜欢它因为 - 他不是来自这里.
在这种情况下,连字符不在引号内,因此应该拆分字符串.
有什么想法吗?
您可以使用
'[^'\\]*(?:\\.[^'\\]*)*'(*SKIP)(?!)|-
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
该'[^'\\]*(?:\\.[^'\\]*)*'部分将匹配单引号和任何转义实体,并将(*SKIP)(?!)强制正则表达式引擎在最后一个索引+匹配长度之后继续搜索匹配项。
这是IDEONE 演示:
$re = "/'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(*SKIP)(?!)|-/";
$strs = array("The 'big-yellow' house-is near the lake", "He doesn\'t like it because-he isn\'t from here.");
foreach ($strs as $str) {
$result = preg_split($re, $str);
print_r($result);
}
Run Code Online (Sandbox Code Playgroud)
输出:
Array( [0] => The 'big-yellow' house [1] => is near the lake)和Array( [0] => He doesn\'t like it because [1] => he isn\'t from here.)。