Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于转义字符的Php regexp_Php_Regex_Escaping - Fatal编程技术网

用于转义字符的Php regexp

用于转义字符的Php regexp,php,regex,escaping,Php,Regex,Escaping,我有一个字符串,用户可以使用逗号手动拆分 例如,字符串value1、value2、value3应生成数组: [“value1”、“value2”、“value3”] 现在,如果用户希望允许逗号作为子字符串,该怎么办?我想通过让用户使用两个逗号或反斜杠转义逗号来解决这个问题。例如,字符串 “Hi,Stackoverflow”将写为“Hi,Stackoverflow”或“Hi\,Stackoverflow” 然而,我发现很难评估这样一个字符串。我已经尝试过preg拆分,但无法查看前视或后视字符序列是

我有一个字符串,用户可以使用逗号手动拆分

例如,字符串
value1、value2、value3应生成数组:

[“value1”、“value2”、“value3”]

现在,如果用户希望允许逗号作为子字符串,该怎么办?我想通过让用户使用两个逗号或反斜杠转义逗号来解决这个问题。例如,字符串

“Hi,Stackoverflow”将写为“Hi,Stackoverflow”或“Hi\,Stackoverflow”


然而,我发现很难评估这样一个字符串。我已经尝试过preg拆分,但无法查看前视或后视字符序列是由偶数还是奇数组成。此外,还必须删除用于转义的反斜杠和双逗号,这可能需要一个额外的替换函数。

为此,我将运行
preg\u replace\u callback
,它允许您计算使用的转义字符并确定如何处理它们。如果coma没有转义,则将其替换为用户不应在其输入中使用的不可打印字符,然后按此字符分解:

$text = 'Hello, World \,asdas, 123';
$data = preg_split('/(?<=[^\\\]),/',$text);
print_r($data);

可以使用不同的分隔符吗?也许字符串可以用管道分隔?同样的问题也会发生。我不想限制用户使用任何字符。所以我想知道你问的问题是否正确。如何输入数据?这是通过网络表单实现的吗?为什么不先单独输入数据(即,如果通过web表单,则使用数组访问表示法)?要匹配反斜杠,需要在PHP字符串中连续输入2个反斜杠,在PHP正则表达式字符串中连续输入4个反斜杠。其次,如果字符串是Hello World\\,asdas,则函数已停止正常运行,因为第一个反斜杠应转义第二个反斜杠,这意味着不应转义该字符串的逗号。您在
之前没有写过,因为第一个反斜杠应转义第二个反斜杠
确定,将解决此问题。请给我点时间。哦,等等,我真傻。我的评论可能是不公正的。当然,用户提供的反斜杠不应转义另一个反斜杠。让我再查一下。您认为您可以提供允许多个逗号作为转义机制的机制吗?对于反斜杠之前有反斜杠的情况,您可以使用
$text='Hello,World\\,asdas,123'
$text=preg\u replace(“/”(“/”)+/”、“\\”、$text)
$data=preg_split('/(?)?
Array ( [0] => Hello [1] => World \,asdas [2] => 123 )