使用php检测引号外的字符

6 php regex split

我需要使用分隔符将字符串拆分为两个.我所要做的就是使用explode()函数......我知道.

但这是我正在尝试做的事情:我需要使用分隔符拆分字符串,但如果分隔符用引号括起来,则应该忽略它.

假设我的分隔符是连字符( - ),我需要拆分以下字符串:

"大黄色"的房子靠近湖边

第一个连字符必须被忽略,因为它在引号中,因此我最终会得到两个字符串,如下所示:

那个"大黄色"的房子
2.靠近湖边

它还应该能够检测到转义的报价.

例如:他不喜欢它因为 - 他不是来自这里.

在这种情况下,连字符不在引号内,因此应该拆分字符串.

有什么想法吗?

Wik*_*żew 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.)