我想匹配兩個東西,這兩個東西都是需要在我的匹配模式中用作'Literal'的元字符。 \Q
是假設引用字符串中的所有元字符,直到\E
...但它不起作用。Perl,模式匹配和元字符
怎麼了?
這是給我麻煩線:if (/\Q$prev\E/ !~ /\Q$ww[0]\E/) {
我想匹配兩個東西,這兩個東西都是需要在我的匹配模式中用作'Literal'的元字符。 \Q
是假設引用字符串中的所有元字符,直到\E
...但它不起作用。Perl,模式匹配和元字符
怎麼了?
這是給我麻煩線:if (/\Q$prev\E/ !~ /\Q$ww[0]\E/) {
它看起來像要在字符串中$prev
在$ww[0]
比較之一。如果是這種情況下,一個正則表達式匹配應該是這樣的:
$result = $prev !~ /\Q$ww[0]\E/
$result
將返回1
如果$prev
是不一樣的無論是在www[0]
,忽略元字符。
然而,如果這是你想做的事,你還不如用ne
:
if ($prev ne $ww[0]){
#do this if $prev and $ww[0] are not the same
}
而且,@toolic提到,下面一行添加到您的腳本的頂部:
use warnings;
這會給你一些關於腳本可能出現的問題的反饋。
非常感謝您的幫助!我像往常一樣複雜化了:)。 ($ prev ne $ ww [0])工作得很好。 – user1238319 2012-02-28 17:33:15
缺席使用=~
或!~
,
/.../
是短期的
$_ =~ m/.../
所以
/\Q$prev\E/ !~ /\Q$ww[0]\E/
是短期的
($_ =~ /\Q$prev\E/) !~ /\Q$ww[0]\E/
這相當於因左正則表達式匹配成功與否以下情況之一:
"" !~ /\Q$ww[0]\E/
"1" !~ /\Q$ww[0]\E/
你只是想:
$prev !~ /\Q$ww[0]\E/ # $ww[0] doesn't contains $prev
如果你真的想
$prev !~ /^\Q$ww[0]\E\z/ # $ww[0] isn't equal to $prev
那麼你可以簡化到
$prev ne $ww[0] # $ww[0] isn't equal to $prev
順便說一句,始終使用use strict; use warnings;
。它可能在這裏發現了問題(但不一定,取決於$_
的值)。
你不能比較這樣的兩個正則表達式。你能發佈更多的代碼,並澄清你想要做什麼? – MattLBeck 2012-02-28 16:39:29
你是什麼意思「它不工作」?你想要插入「$ prev」還是「$ ww [0]」?或者不是嗎? – reinierpost 2012-02-28 16:40:40
使用http:// perldoc。perl.org/warnings.html。 – toolic 2012-02-28 16:42:59