2016-08-17 54 views
0

我目前使用正則表達式來拆分一個字符串轉換爲15個字符子全字:正則表達式來分割上的字符數的字符串,但得到

(?<=\G.{15}) 

示例文本: 第一第二第三第四第五sixthsixthsixthsixthsixthsixth第七

分裂成:

[0] => First second th 
[1] => ird fourth fifth 
[2] => sixthsixthsixth 
[3] => sixthsixthsixths 
[4] => ixth seventh 

我想修改這個有點: 分成15個或更少的字符,但只能分割空白以獲取整個單詞。 如果#1中的分隔符超過15個字符,則將其拆分。

雖然這可能會變得混亂。如果我有一個長度超過15個字符的單詞,我希望這個單詞被分割,然後下面的子字符串也應該有15個字符,而不僅僅是單詞的後半部分。

對於上面的例子,我想:

[0] => First second 
[1] => third fourth 
[2] => fifth 
[3] => sixthsixthsixth 
[4] => sixthsixthsixth 
[5] => sixth seventh 

我也很樂意用:

[0] => First second 
[1] => third fourth 
[2] => fifth sixthsixt 
[3] => hsixthsixthsixt 
[4] => hsixthsixth 
[5] => seventh 

如果前兩個不能在一個單一的正則表達式可以做到,那麼我會很高興與:

[0] => First second 
[1] => third fourth 
[2] => fifth 
[3] => sixthsixthsixth 
[4] => sixthsixthsixth 
[5] => sixth 
[6] => seventh 

兩者的區別在於我將長字符串拆分到了不同的位置。

是否有可能用一個正則表達式來做到這一點?

+1

,什麼是你的語言? – revo

+0

什麼是'\ G'?從來沒有見過速記課,之前o_O –

+1

準確地說'\ G'的意思是[字符串開頭或前一匹配結束](http://www.regular-expressions.info/continue.html)。 @ MathiasR.Jessen – revo

回答

1

瞭解語言可以更清楚地知道應該使用哪些標記和構造。如果您在使用Ruby 2.0或更高版本則沒這一個:

(.{1,15}\b|.{15})\K(?: +|\B|\Z) 

通過以換行符替換\n比賽你會得到你想要的方式將字符串分割:

First second 
third fourth 
fifth 
sixthsixthsixth 
sixthsixthsixth 
sixth seventh 

Live demo

如果你需要他們爲拍攝組陣列只,然後有一個較短的方式:

(.{1,15}\b|.{15}) 

Live demo

說明:

(   # Begin capturing group (1) 
    .{1,15} # Match 15 characters max (greedy) 
    \b  # Till reaching a word boundary 
    |   # Or 
    .{15}  # Match those parts of a long word 
)   # End of (1) 

    \K   # Reset whatever is matched so far 

    (?:   # Begin non-capturing group 
    +  # Match white-spaces 
    |   # Or 
    \B  # A non-word boudanry 
    |   # Or 
    \Z  # End of string 
)   # End of non-capturing group 
+0

謝謝 - 這些例子都適合我。一件奇怪的事情 - 我用這個正則表達式引擎得到了非常不同的結果:https://myregextester.com/index。php 但我想我可以在我的代碼中嘗試這些,看看我得到了什麼。即使是稍微不同的結果也比我以前的要好。 –

+0

第一個使用Java不支持的'\ K'令牌,第二個可以在所有正則表達式中使用。 @ RobertA.Decker – revo

+0

例如,當我發現\ b在URL中使用的字符之間發生分裂時,我做了一些小改動。現在是: (。{1,15}(?:\ s | $)|。{15}) 15個字符顯然不是我真正使用的 - 我只是將它保留爲演示目的。 –

相關問題