gpt4 book ai didi

php - 拆分字符串时出现问题

转载 作者:行者123 更新时间:2023-12-04 06:06:33 24 4
gpt4 key购买 nike

我实际上有一些字符串,其中一些数据由管道字符分隔,例如:

One | Two | Three

我想在找到管道时拆分这些字符串,但我也想确保如果有“转义管道”(\| ),它不会被处理。

因此,例如,从这个字符串: Tom | Dick \| and | Harry
我想获得一个包含值的数组: Tom , Dick \| and , Harry
出于这个原因,我编写了一个小的正则表达式来搜索前面没有反斜杠的管道: (?<!\\)\|
我已经在我的 IDE(PHPStorm,即基于 Java 的 AFAIK)中测试了这个正则表达式并且它工作正常,但是当我在 PHP 项目中使用它时我收到错误;实际上我正在使用 PHP 5.3.6 版测试此代码

你能帮我一下,告诉我我做错了什么吗?
<?php

$cText = "First choice | Second \| choice |Third choice";

// I need to split a string, and to divide it I need to find
// each occurrence of a pipe character "|", but I also have to be sure not
// to find an escaped "|".
//
// What I'm expecting:
// acChoice[0] = "First choice "
// acChoice[1] = " Second \| choice "
// acChoice[2] = "Third choice"

$acChoice = preg_split("/(?<!\\)\|/", $cText);

// Gives this error:
// Warning: preg_split(): Compilation failed: missing ) at offset 8 in - on line 14 bool(false)

$acChoice = mb_split("/(?<!\\)\|/", $cText);

// Gives this error:
// Warning: mb_split(): mbregex compile err: end pattern with unmatched parenthesis in - on line 19 bool(false)

?>

最佳答案

您需要对反斜杠进行双重转义,因为它们会被解析两次:一次被字符串解析器解析,一次被正则表达式引擎解析。

$acChoice = preg_split("/(?<!\\\\)\\|/", $cText);

关于php - 拆分字符串时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8280012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com