Regex 在Perl中提取符号后的字符串
如何在Perl中提取符号后的字符串 我试着做了一些搜索,但即使是我找到的代码也不起作用 我正在尝试提取冒号后面的字符串。所以我想在冒号后显示所有内容 例如:Regex 在Perl中提取符号后的字符串,regex,string,perl,split,Regex,String,Perl,Split,如何在Perl中提取符号后的字符串 我试着做了一些搜索,但即使是我找到的代码也不起作用 我正在尝试提取冒号后面的字符串。所以我想在冒号后显示所有内容 例如: string = day1: string over here substring = string over here 到目前为止,我已经尝试: $substring = $string=~ /(\:.*)\s*$/; 但它只反复输出数字1。这是因为标量上下文中的模式匹配是布尔测试。如果要捕获括号内容(捕获组),则需要一个列表上下文
string = day1: string over here
substring = string over here
到目前为止,我已经尝试:
$substring = $string=~ /(\:.*)\s*$/;
但它只反复输出数字1。这是因为标量上下文中的模式匹配是布尔测试。如果要捕获括号内容(捕获组),则需要一个列表上下文。如果列表中只有一个元素,则可以: 试试这个:
my ( $substring ) = $string=~ /(\:.*)\s*$/;
差异可能有点微妙,但基本上-我们将模式匹配中的“所有点击”分配到一个列表中。。。这包括一个要素
注意-这样您就可以:
my @matches = $string =~ m/(.)/g;
my ( $key, $value ) = $string =~ m/(\w+)=(\w+)/;
并获得多个“点击”返回。如果您按照上述操作,您将只获得第一个匹配项-这与您的模式无关,但您可以:
my @matches = $string =~ m/(.)/g;
my ( $key, $value ) = $string =~ m/(\w+)=(\w+)/;
比如说 我通常使用括号从文本中提取部分,然后引用存储在$1变量中的结果 请看一个例子:
my $text = "day1: string over here";
print $1 if ($text =~ /:\s*(.+)$/);
但该代码也可能收到类似的结果:
my $text = "day1: string over here";
my ($a) = $text =~ /:\s*(.+)$/;
print $a;
您还可以使用以下函数实现desire子字符串:
#!/usr/bin/perl
use warnings;
use strict;
my $string = "day1: string over here";
my (undef, $substring) = split(':\s*', $string);
print $substring, "\n";
输出:
string over here
或者,您可以通过在正则表达式中使用捕获组()
来实现此目的:
my $string = "day1: string over here";
$string =~ m/(.*)\:\s+(.*)$/;
my $substring = $2;
print $substring, "\n";
正则表达式应该是
/:\s*(.*)\s*$/
我不清楚为什么在正则表达式示例中捕获两个组,然后忽略其中一个。OP想要提取冒号后面的字符串,所以我忽略了第一个。已批准。但是您可以完全省略前面的(.*)
,只访问$1
。还是我遗漏了什么?我想展示OP的第一部分在哪里,以及捕获组是如何工作的,所以我没有忽略主要部分。