从字符串中删除引号

时间:2011-04-21 14:35:14

标签: perl string

所以我认为这只是一个简单的问题,但是我得到的结果不正确。基本上我试图删除字符串周围的引号。例如,我有字符串“01:00”,我想要01:00,下面是我认为我能够做到这一点的代码:

$expected_start_time = $conditions =~ m/(\"[^\"])/;

每次运行它都会返回1,所以我猜它只是返回true并且实际上并没有从引号中提取字符串。无论报价为“02:00”,“02:20”,“08:00”等等,都会发生这种情况。

4 个答案:

答案 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