簡體   English   中英

如何在不丟失字符的情況下進行preg_split?

[英]How to preg_split without losing a character?

我有這樣的字符串

$string = "Hello; how are you;Hey, I am fine";
$new = preg_split("/;\w/", $string);
print_r($new);

我僅在單詞和“;”之間沒有空格時才嘗試拆分字符串。 但是當我這樣做時,我會從Hey中丟失H。 這可能是因為拆分是通過對; H的識別而發生的。 有人可以告訴我如何預防嗎?

我的輸出:

$array  =   [
  0 => [
    0 => 'Hello; how are you ',
    1 => 0,
  ],
  1 => [
    0 => 'ey, I am fine',
    1 => 21,
  ],
]

您可以使用單詞邊界 \\b

\\b;\\b

$string = "Hello; how are you;Hey, I am fine";
$new = preg_split("/\b;\b/", $string);
print_r($new);

演示

或負向前瞻和負向后瞻

(?<! );(?! )

演示

環顧四周需要更多步驟。 就圖案效率而言,單詞邊界更好,並保持了預期的“無長度”字符消耗。

使用格式正確的英語,您將不必在分號前檢查空格,因此似乎只有一個字的邊界就足夠了(我不知道格式錯誤的英語是否可能,因為它沒有在示例字符串中表示)。

如果要獲取偏移值,則preg_split()帶有一個標志。

代碼:( 演示

$string = "Hello; how are you;Hey, I am fine";
$new = preg_split("/;\b/", $string, -1, PREG_SPLIT_OFFSET_CAPTURE);
var_export($new);

輸出:

array (
  0 => 
  array (
    0 => 'Hello; how are you',
    1 => 0,
  ),
  1 => 
  array (
    0 => 'Hey, I am fine',
    1 => 19,
  ),
)

您正在正則表達式中捕獲\\w 因此,請執行以下操作:

$new = preg_split("/;(?=\w)/", $string);

捕獲組定義在方括號中,但?=表示匹配,但不捕獲。

在這里查看https://3v4l.org/Q77LZ

在此正則表達式中使用split ;(?=\\w)則不會丟失H

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM