正则表达式在第二个和第三个斜杠之间查找文本

时间:2013-05-30 00:17:46

标签: regex

我想捕获第二个斜杠之后和字符串中第三个斜杠之前发生的文本。例如:

/ IPADDRESS /数据库名称/

我只需捕获数据库名称。数据库名称可能包含字母,数字和下划线。感谢。

6 个答案:

答案 0 :(得分:14)

你如何访问它取决于你的语言,但你基本上只想要一个捕获组,用于你的第二个和第三个“/”之间的任何落差。假设您的字符串始终与示例的形式相同,则为:

/.*/(.*)/

如果可以存在多个斜杠,但数据库名称中永远不存在斜杠,则需要:

/.*/(.*?)/

答案 1 :(得分:9)

/.*?/(.*?)/

如果您的行在行尾始终有/

([^/]*)/$

替代split方法:

split("/")[2]

答案 2 :(得分:2)

正则表达式将是:

/[^/]*/([^/]*)/

所以在Perl中,正则表达式捕获语句类似于:

($database) = $text =~ m!/[^/]*/([^/]*)/!;

通常/字符用于分隔正则表达式,但由于它们被用作匹配的一部分,因此可以使用另一个字符。或者,可以转义/字符:

($database) = $text =~ /\/[^\/]*\/([^\/]*)\//;

答案 3 :(得分:1)

我知道你特意要求正则表达式,但你真的不需要正则表达式。您只需要通过分隔符(在本例中为反斜杠)拆分字符串,然后选择您需要的部分(在本例中,第3个字段 - 第一个字段为空)。

  • cut示例:

    cut -d '/' -f 3 <<< "$string"
    
  • awk示例:

    awk -F '/' {print $3} <<< "$string"
    
  • perl表达式,使用split函数:

    (split '/', $string)[2]
    

答案 4 :(得分:1)

你可以通过这种方式缩短模式:

[^/]+/(\w+)

此处\w包含A-Z, a-z, 0-9 and _

等字符

我建议你给SPLIT函数一个优先级,因为我在可以使用它们的地方经历过RegEx函数的良好表现。

答案 5 :(得分:0)

您可以将explode功能与PHPsplit与其他语言一起使用,以便进行此类操作。

无论如何,这里是正则表达式:

/[\/]*[^\/]+[\/]([^\/]+)/