我想捕获字符串中第二个斜杠之后和第三个斜杠之前出现的文本。例子:
/IP地址/数据库名/
我只需要捕获数据库名称。数据库名称可能包含字母、数字和下划线。谢谢。
您如何访问它取决于您的语言,但您基本上只需要一个捕获组来处理您的第二个和第三个“/”之间的任何内容。假设您的字符串始终与您的示例格式相同,这将是:
/.*/(.*)/
如果可以存在多个斜杠,但数据库名称中永远不能存在斜杠,则您需要:
/.*/(.*?)/
/.*?/(.*?)/
如果您的行始终/
位于行尾:
([^/]*)/$
替代split
方法:
split("/")[2]
正则表达式将是:
/[^/]*/([^/]*)/
所以在 Perl 中,正则表达式捕获语句将类似于:
($database) = $text =~ m!/[^/]*/([^/]*)/!;
通常,该/
字符用于分隔正则表达式,但由于它们被用作匹配的一部分,因此可以使用另一个字符。或者,/
可以转义该字符:
($database) = $text =~ /\/[^\/]*\/([^\/]*)\//;
通过这种方式,您甚至可以进一步缩短模式:
[^/]+/(\w+)
这里\w
包括像A-Z, a-z, 0-9 and _
我建议你SPLIT
优先考虑函数,因为我在任何可能使用它们的地方都体验到它们优于 RegEx 函数的性能。
您可以使用explode
带有PHP
或split
带有其他语言的函数来进行此类操作。
无论如何,这是正则表达式模式:
/[\/]*[^\/]+[\/]([^\/]+)/
我知道您专门要求使用正则表达式,但您实际上并不需要正则表达式。您只需用分隔符(在本例中为反斜杠)拆分字符串,然后选择您需要的部分(在本例中,第三个字段 - 第一个字段为空)。
cut
例子:
cut -d '/' -f 3 <<< "$string"
awk
例子:
awk -F '/' {print $3} <<< "$string"
perl
表达式,使用split
函数:
(split '/', $string)[2]
等等