在groovy中的正则表达式

时间:2010-07-20 13:38:25

标签: regex groovy

如何查找字符串是否包含'/'作为最后一个字符。

如果不存在,我需要追加/最后一个字符

ex1 : def s = home/work 
    this shuould be home/work/     
ex2 : def s = home/work/
     this will remain same as home/work/

Mybad认为这很简单,但失败了

提前致谢

3 个答案:

答案 0 :(得分:3)

您可以使用正则表达式,也可以使用endsWith("/")

答案 1 :(得分:3)

上面发布的endsWith方法有效,对大多数读者来说可能都很清楚。为了完整起见,这是使用正则表达式的解决方案:

def stripSlash(str) {
    str?.find(/^(.*?)\/?$/) { full, beforeSlash -> beforeSlash }
}

assert "/foo/bar" == stripSlash("/foo/bar")
assert "/baz/qux" == stripSlash("/baz/qux/")
assert "quux" == stripSlash("quux")
assert null == stripSlash(null)

正则表达式可以理解为:

    从行首开始
  • ^
  • 捕获长度为零或多个字符的非贪婪组:(.*?)
  • 以可选斜杠结尾:/?
  • 后跟行尾:$

然后捕获组返回所有内容,因此如果存在斜杠,则删除斜杠。

答案 2 :(得分:1)

这不起作用吗?

s?.endsWith( '/' )

所以...某种规范化功能,例如:

def normalise( String s ) {
  ( s ?: '' ) + ( s?.endsWith( '/' ) ? '' : '/' )
}

assert '/' == normalise( '' )
assert '/' == normalise( null )
assert 'home/tim/' == normalise( 'home/tim' )
assert 'home/tim/' == normalise( 'home/tim/' )

[edit]为了做到这一点(即:删除任何尾部斜杠),你可以这样做:

def normalise( String path ) {
  path && path.length() > 1 ? path.endsWith( '/' ) ? path[ 0..-2 ] : path : ''
}

assert '' == normalise( '' )
assert '' == normalise( '/' )
assert '' == normalise( null )
assert 'home/tim' == normalise( 'home/tim' )
assert 'home/tim' == normalise( 'home/tim/' )