如果最后一个字符是空格,则不会捕获空格的否定前瞻

时间:2014-07-01 19:54:39

标签: regex postgresql

我试图捕获字符串的前36个字符,除非最后一个字符是空格。我不想要这个空间。我在这做错了什么?最后,我想让它检查它不是空格,逗号或冒号。这可能吗?

.{36}(?! )

另外,为什么没有选择第一个字母?

http://regex101.com/r/fP9tB8/1

2 个答案:

答案 0 :(得分:3)

我将您的请求解释为

  

如果最后一个字符不是空格,则匹配前36个字符;否则匹配35。

这将通过

完成
^.{35}[^ ]

demo

如果你想要"没有冒号,逗号或空格"你需要

^.{35}[^:, ]

如果(根据你最近的评论)你想要"最后没有空格,逗号或冒号 - 那么最长的字符串长度不超过36个字符"你得到了

^.{1,35}[^,: ](?![^: ,])

demo

说明:匹配

^        starting at the beginning
.{1,35}  at most 35 of anything
[^,: ]   not followed by , : or space
(?![^:, ]) not followed by something that isn't , : or space (two negatives...)

确认:

poas apodka sapodkfas adksidfj odfda: asdfasdfasdfasdfasdf:  gi oaidfg

匹配

poas apodka sapodkfas adksidfj odfda

poas apodka sapodkfas adksidfj odf da: asdfasdfasdfasdfasdf:  gi oaidfg                                      

匹配

poas apodka sapodkfas adksidfj odf

答案 1 :(得分:0)

将你的正则表达式设为:

^.{1,36}(?<![ ,:])

Working Demo

您的正则表达式.{36}(?! )正在尝试找到任意36个字符的字符串(后面没有空格)