所以我认为这只是一个简单的问题,但是我得到的结果不正确。基本上我试图删除字符串周围的引号。例如,我有字符串“01:00”,我想要01:00,下面是我认为我能够做到这一点的代码:
$expected_start_time = $conditions =~ m/(\"[^\"])/;
每次运行它都会返回1,所以我猜它只是返回true并且实际上并没有从引号中提取字符串。无论报价为“02:00”,“02:20”,“08:00”等等,都会发生这种情况。
答案 0 :(得分:13)
你忘记的只是让LHS把匹配放入列表上下文的parens所以它返回子匹配组。通常的做法是:
($expected_start_time) = $condition =~ /"([^"]*)"/;
答案 1 :(得分:10)
您似乎知道第一个和最后一个字符是引号,因此请使用
$expected_start_time = substr $conditions, 1, -1;
无需正则表达式。
答案 2 :(得分:4)
蛮力方式是:
$expected_start_time = $conditions;
$expected_start_time =~ s/"//g;
请注意原始正则表达式:
m/(\"[^\"])/
将捕获开头报价和以下非报价字符。要捕获双引号之间的非引号字符,您需要一些变体:
m/"([^"]*)"/;
这是Perl(和正则表达式),TMTOWTDI - 不止一种方式。
答案 3 :(得分:1)
在标量上下文中,如果正则表达式匹配字符串,则正则表达式返回true。您可以使用$1
访问该匹配项。请参阅perlre。