【问题标题】:Regex - explode a string based on backslash character that has inconsistent occurrences正则表达式 - 根据出现不一致的反斜杠字符分解字符串
【发布时间】:2020-07-09 15:46:23
【问题描述】:

我正在使用 laravel php 并尝试将字符串分解为数组。字符串总是有斜线字符,但该字符可以出现多次:

例子:

  • 输入字符串:"abcd\\efg\\\\hij\klm\\\\\\\opq"

  • 预期的数组:[abcd, efg, hij, klm, opq]

我尝试使用 str_replace 函数将 '\' 替换为 '' ,但它给出了错误的结果,因为我在分解字符串时不会使用任何分隔符。

我知道正则表达式可以做到这一点,但我不知道如何实现这一点。

我希望有人能在这件事上帮助我。

【问题讨论】:

  • 令人惊讶的是,我找不到这个问题的重复项
  • @ctwheels 我的错我已经编辑了这个问题.. 它实际上是一个反斜杠而不是一个斜杠.. 当我使用你的建议时,我收到一个错误,指出 preg_split(): Delimiter must not be alphanumeric or backslash
  • @Alladin 更新了我的答案

标签: php regex laravel


【解决方案1】:

您可以使用preg_split 和正则表达式/+(匹配一个或多个/ 字符)来拆分/ 字符的可变长度子字符串:

See code in use here

<?php

$string = "abcd//efg////hij/klm//////opq";
var_dump(preg_split('`/+`', $string));

更新

自 OP 将拆分字符和字符串更改为反斜杠 \ 后更新。

与上面显示的正斜杠类似,反斜杠也可以使用正则表达式\\\\+ 进行匹配。您需要对字符串和正则表达式的反斜杠进行转义,因此\\\\+ 变为字符串\\+,它变为原始正则表达式\+

See code in use here

<?php

$string = "abcd\\efg\\\\hij\klm\\\\\\\opq";
var_dump(preg_split('/\\\\+/', $string));

【讨论】:

  • 对不起,我犯了一个错误。我已经编辑了这个问题..它实际上是一个反斜杠而不是一个斜杠..当我使用你的建议时,我收到一个错误,指出preg_split(): Delimiter must not be alphanumeric or backslash
猜你喜欢
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 2010-12-01
  • 1970-01-01
相关资源
最近更新 更多