23

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

/IP地址/数据库名/

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

4

6 回答 6

23

您如何访问它取决于您的语言,但您基本上只需要一个捕获组来处理您的第二个和第三个“/”之间的任何内容。假设您的字符串始终与您的示例格式相同,这将是:

/.*/(.*)/

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

/.*/(.*?)/
于 2013-05-30T00:21:47.680 回答
11
/.*?/(.*?)/

如果您的行始终/位于行尾:

([^/]*)/$

替代split方法:

split("/")[2]
于 2013-05-30T04:09:22.827 回答
5

正则表达式将是:

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

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

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

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

($database) = $text =~ /\/[^\/]*\/([^\/]*)\//;
于 2013-05-30T00:27:30.500 回答
2

通过这种方式,您甚至可以进一步缩短模式:

[^/]+/(\w+)

这里\w包括像A-Z, a-z, 0-9 and _

我建议你SPLIT优先考虑函数,因为我在任何可能使用它们的地方都体验到它们优于 RegEx 函数的性能。

于 2013-05-30T05:11:27.537 回答
1

您可以使用explode带有PHPsplit带有其他语言的函数来进行此类操作。

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

/[\/]*[^\/]+[\/]([^\/]+)/
于 2013-05-30T00:29:44.307 回答
1

我知道您专门要求使用正则表达式,但您实际上并不需要正则表达式。您只需用分隔符(在本例中为反斜杠)拆分字符串,然后选择您需要的部分(在本例中,第三个字段 - 第一个字段为空)。

  • cut例子:

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

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

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

等等

于 2013-05-30T03:53:52.147 回答