获取最后一个角色到特定角色

时间:2016-01-26 11:45:08

标签: regex

假设我有一个字符串某事-123

我需要获得它的最后5个(或更少)字符,但只有 - 如果字符串中有一个,那么结果就像 thing ,但如果字符串中没有 - ,例如 something123 ,则结果为 ng123 ,如果字符串为 123 < / strong>然后结果将是 123

我知道如何制作最后5个字符:

/.{5}$/

我知道如何在第一次 -

之前完成所有工作
/[^-]*/

但我无法弄清楚如何将它们组合在一起,并且为了使事情变得更糟,我需要在没有从特定组和类似的高级正则表达式中提取它的情况下获取匹配项,因为我想在SQL Anywhere中使用它,请帮助

请大家帮忙,但看起来像一个完整的正则表达式解决方案对我的问题来说太复杂了,所以我做得非常简单:SELECT right(regexp_substr('something-123', '[^-]*'), 4)

4 个答案:

答案 0 :(得分:2)

一种选择是对结果进行分组:

(.{4})-

现在您已经捕获了结果但没有-

或者使用外观你可以:

.{4}(?=-)

匹配&#34;之前出现的任何4个字符 - &#34;。

答案 1 :(得分:1)

怎么样:

(.{5})(?:-[^-]+)?$

结果在第1组

答案 2 :(得分:1)

试试这个正则表达式:

(.{1,5})(?:-.*|$)

第1组有您需要的结果

demo

答案 3 :(得分:1)

您可以使用:

.{5}(?=(?:-[^-]*)?$)

请参阅the regex demo

我们仅在字符串中的最后一个-之前或字符串的最后一行((?=(?:-[^-]*)?$))匹配换行符以外的5个符号。您只需要收集匹配,不需要检查组/子匹配。

更新

要匹配第一个连字符前的连字符以外的任何1到5个字符(如果存在于字符串中),您可以使用

([^-]{1,5})(?:(?:-[^-]*)*)?$

demo。我们依赖于此前瞻,检查预期子字符串之后是否有- + non-hyphen个序列。

faster alternative

^[^-]*?([^-]{1,5})(?:-|$)

此正则表达式将搜索-以外的任何字符,最多1到5个此类字符。

请注意,这里我们需要的值是第1组。