【问题标题】:How to split a string at a specific character but not replace that character?如何在特定字符处拆分字符串但不替换该字符?
【发布时间】:2021-02-15 18:23:30
【问题描述】:

我想在每个 ';' 处拆分以及下面字符串中的每个“{”:

// string
$str = 'abc;def;ghi{jkl;}if('mno') {pqr;}';
// expression
$pattern = "/[;{\(]/";

$result = preg_split($pattern);

print_r($result);

它在每个 ';' 处分裂和 '{' 但这些字符也被删除,这是我不想要的。我使用了 explode() 函数,虽然它会分裂,但也替换了那个字符。

以及如何在一个字符串中进行多次拆分?

预期的结果应该是这样的。 数组(

0 => "abc;",

1 => "def;",

2 => "ghi{",

3 => "jkl;",

4 => "}if('mno') {",

5 => "pqr;",

6 => "}",
)

请指导我,谢谢。

【问题讨论】:

  • 使用后视:(?<=[;{(])

标签: php regex laravel string split


【解决方案1】:

您可以使用Lookahead and Lookbehind Zero-Length Assertions

例子:

// string
$str = "abc;def;ghi{jkl;}if('mno') {pqr;}";
// expression
$pattern = "/(?=[;{\(])/";

$result = preg_split($pattern, $str);

$result 是一个类似的数组

array (
  0 => "abc",
  1 => ";def",
  2 => ";ghi",
  3 => "{jkl",
  4 => ";}if",
  5 => "('mno') ",
  6 => "{pqr",
  7 => ";}",
)

【讨论】:

  • 我想要 0 => "abc;", ... 和 2 = "ghi{",
  • 请看预期结果。
【解决方案2】:

这个模式实际上解决了我的问题。

$pattern = "/(?<=[;{}])/";

我接受回答是因为@jspit 帮助我解决了这个问题。

【讨论】:

  • 接受不能解决问题的答案是没有意义的。
猜你喜欢
  • 2019-10-19
  • 2016-11-08
  • 2023-03-05
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多