我想捕获第二个斜杠之后和字符串中第三个斜杠之前发生的文本。例如:
/ IPADDRESS /数据库名称/
我只需捕获数据库名称。数据库名称可能包含字母,数字和下划线。感谢。
答案 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
功能与PHP
或split
与其他语言一起使用,以便进行此类操作。
无论如何,这里是正则表达式:
/[\/]*[^\/]+[\/]([^\/]+)/