2012-01-17 95 views
0

我有(黑客)这个正则表达式到目前为止匹配连字符之间的任何单词,并将它们分开,留下1个字符的文章。我需要这些单词分开的原因是,Blogger设法停止39个字符的URL并且不会打破任何单词。到目前为止是这种情况:使用正则表达式来匹配Blogger(blogspot)固定链接

^((([a-zA-Z0-9]{2,39})-)+)(?:([a-zA-Z0-9]{1})-)((([a-zA-Z0-9]{2,39})-)+){2,39}$

测试对/wishing-you-a-very-merry-christmas-and-a-happy-new-year.html
匹配:wishing-you-a-very-merry-christmas-and-
替换字符串:$1(不工作!)它会导致:

如何获得1-字母文章不打印在结果正则表达式?我如何测试并删除结果中最后的-

+0

我对你的模式困惑。尽管如此,我认为该模式不能匹配以斜杠开头的字符串 - 它与第一个字母的ASCII字母数字匹配,并且从不匹配斜杠。我还建议删除一些捕获组(我已经计算了7次)。 – Kobi 2012-01-17 07:02:25

+1

如果你问如何匹配一个不连续的文本,你不能。提取整个子弹,然后用空字符串替换要排除的任何单词。 – tripleee 2012-01-17 07:14:28

回答

1

你不能用一个正则表达式来构建它。

长度不超过39个字符且不以-结尾的部分是没有问题的。

^\/?([\w-]{3,39})(?<!-).* 

看到它on Regexr

(?<!-)是向后断言,以确保该字符串不以连字符结尾。

但是你可以在同一时间子与1

在自己的这个长度不删除也没问题

(?<=[/-]|^)[^-]-|-[^-](?=[-./]|$) 

看到它here on Regexr

+0

谢谢 - 通过该网址,它完美匹配,停在“...和”,但在其他网址上,它停在正好39个字符处 - 如何在最后一个字(由连字符定义)停止它? – DSWP 2012-01-17 20:20:22