2016-08-17 40 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个字符显然不是我真正使用的 - 我只是将它保留为演示目的。 –

相关问题