所以我認爲這只是一個簡單的問題,但是我得到的結果不正確。基本上我試圖刪除字符串周圍的引號。比如我有字符串「01:00」,我想01:00,下面是如何,我想我將能夠做到這一點的代碼:刪除字符串中的引號
$expected_start_time = $conditions =~ m/(\"[^\"])/;
這個運行時,它會返回1每一次,所以我猜測它只是返回true而不是實際從引號中提取字符串。這一點無論是什麼引號「02:00」,「02:20」,「08:00」等
所以我認爲這只是一個簡單的問題,但是我得到的結果不正確。基本上我試圖刪除字符串周圍的引號。比如我有字符串「01:00」,我想01:00,下面是如何,我想我將能夠做到這一點的代碼:刪除字符串中的引號
$expected_start_time = $conditions =~ m/(\"[^\"])/;
這個運行時,它會返回1每一次,所以我猜測它只是返回true而不是實際從引號中提取字符串。這一點無論是什麼引號「02:00」,「02:20」,「08:00」等
所有你忘記的是LHS把匹配放入列表上下文的所有元素,所以它返回了子匹配組。正常的方式來做到這一點是:
($expected_start_time) = $condition =~ /"([^"]*)"/;
蠻力的方法是:
$expected_start_time = $conditions;
$expected_start_time =~ s/"//g;
而且,原正則表達式:
m/(\"[^\"])/
會捕獲開局報價和下面的非引用字符。爲了捕捉雙引號之間的非引號字符,你需要一些變種:
m/"([^"]*)"/;
這是Perl的(和正則表達式),TMTOWTDI - 有一個以上的方式做到這一點。
在標量上下文中,如果正則表達式匹配字符串,則返回true。您可以通過$1
訪問比賽。見perlre。
看來,你知道第一個和最後一個字符是引號,所以使用
$expected_start_time = substr $conditions, 1, -1;
無需使用正則表達式。
所以有人低估了我。請解釋一下? – 2013-03-17 16:25:35
這應該是被接受的答案。爲什麼這會得到低投票?它不比=〜正則表達式更高效嗎?無論如何,它的工作和感覺更清醒,所以從我投票 – roothahn 2018-02-23 18:06:44
你的意思是s/\「/ g吧? – Brandon 2011-04-21 14:39:21
布蘭登:'''不是特殊字符,不需要引用,儘管這樣做沒有任何傷害。 – 2011-04-21 14:41:15
@Brandon:不 - 我的意思是我寫的。在正則表達式中,引號沒有特殊含義。 – 2011-04-21 14:43:23