2016-10-12 71 views
0

使用perl,我無法執行簡單的搜索以查看一個數字是否在另一箇中。下面的例子不會輸入if語句。無法使用Perl搜索另一個變量中的一個變量

my $a = "12345"; 
my $b = "123456789"; 
if($a=~ m/$b/g) #doesn't work 
{ 
    print "success"; 
} 

下面也不起作用。

my $a = "12345"; 
my $b = "123456789"; 
if($a =~ /$b/) #doesn't work 
{ 
    print "success"; 
} 
+0

如果你想檢查'$ a'是否在'$ b'中,使用'$ b =〜m/$ a /'('g'標誌不需要) – Sundeep

+0

這個有點不直觀,但是它的工作....謝謝!我轉而使用索引搜索。 – Jelani

+0

這幾乎不是非直觀的......假設你沒有使用變量,它會是'$ b =〜m/12345 /'...並且對於搜索和替換,它是'$ b =〜s/12345/abc /'..所以帶走是'variable =〜'匹配或搜索並替換該變量 – Sundeep

回答

0

在正則表達式中可能有不同含義的字符。相反,這樣做:

if (index($b, $a) != -1) #works 
0

我相信你可能混淆了你的變量在聲明中。 $ a =〜m/$ b/g表示可以在$ a中找到$ b(爲了正確),而不是可以在$ b中找到$ a。由於$ a的長度小於$ b,所以語句失敗(因爲在12345中找不到123456789)。

我懷疑你想要的是:

if ($b =~ m/$a/g) # or ($b =~ /$a/) 
{ 
    print "success"; 
} 
+1

'if(// g)'沒有任何意義,並且您沒有使用'quotemeta'將'$ a'轉換爲模式。 – ikegami

3

要檢查是否$substr$string,你想:

if ($string =~ /\Q$substr\E/) 

if (index($string, $substr) >= 0) 

在你的情況,這意味着

if ($b =~ /\Q$a\E/) 

if (index($b, $a) >= 0) 

\Q..\E導致之間被逐字匹配,而不是它作爲一個正則表達式模式處理的變量的內容。

if (//g)是沒有意義的,使用它會產生微妙和非常奇怪的問題。

相關問題