簡體   English   中英

使用正則表達式不匹配數字之間的句點

[英]Using regex to not match periods between numbers

我有一個正則表達式代碼,在[.!?]之間拆分字符串,它可以工作,但我正在嘗試在正則表達式代碼中添加其他東西。 我試圖讓它與數字之間的[.]不匹配。 那可能嗎? 所以,如下例所示:

$input = "one.two!three?4.000.";
$inputX = preg_split("~(?>[.!?]+)\K(?!$)~", $input); 

print_r($inputX);

結果:

Array ( [0] => one. [1] => two! [2] => three? [3] => 4. [4] => 000. )

需要結果:

Array ( [0] => one. [1] => two! [2] => three? [3] => 4.000. )

你應該可以拆分:

(?<=(?<!\d(?=[.!?]+\d))[.!?])(?![.!?]|$)

https://regex101.com/r/kQ6zO4/1

它使用外觀來確定拆分的位置。 它看起來后面,試圖以匹配任何集[.!?] 一個或多個 ,因為它不是由前后的數字繼任長的時間

它也不會通過確保最后一個集不是字符串的結尾來返回最后一個空匹配。

更新:

實際上這應該更有效:

(?!\d+\.\d+).+?[.!?]+\K(?!$)

https://regex101.com/r/eN7rS8/1

這是使用正則表達式flags另一種可能性:

$input = "one.two!three???4.000.";
$inputX = preg_split("~(\d+\.\d+[.!?]+|.*?[.!?]+)~", $input, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 

print_r($inputX);

它包括拆分中的分隔符並忽略空匹配。 正則表達式可以簡化為((?:\\d+\\.\\d+|.*?)[.!?]+) ,但我認為上面的代碼示例中的內容更有效。

暫無
暫無

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

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