以下是我正在使用的正則表達式的簡化。在我的開發機器上,$pattern1
和$pattern2
返回一個匹配,但是在我的生產機器上只有$pattern1
返回一個匹配!顯然,$pattern1
和$pattern2
之間的唯一區別在於其中一個括號圍繞單詞。然而兩者都是有效的模式,應該匹配給定的乾草堆(據我所知)。當添加括號時,preg_match失敗
$pattern1 = '/\<a name="ERROR TEXT"\>\<\/a\>\s*?validated\s*?\<\/span\>\s*?\<\/h1\>/';
$pattern2 = '/\<a name="ERROR TEXT"\>\<\/a\>\s*?(validated)\s*?\<\/span\>\s*?\<\/h1\>/';
$haystack = '- IFCS msg value, BOOKMARKED AS ERROR TEXT -->
<a name="ERROR TEXT"></a>
validated</span>
</h1>
<!-- START: .formActionHolder -->
<div class="formActionHolder">';
preg_match($pattern1, $haystack, $matches);
print_r($matches);
有沒有人發現過這個問題?請注意,這不是整個正則表達式 - 這是我認定爲問題的簡化版本。在我的實際代碼中,'驗證'的值不是一個常量 - 因此我使用括號來捕獲單詞的原因。當然模式在括號內也有其他字符,所以我可以在這裏捕捉變量詞。這只是一個簡化的例子,它解決了我有兩個看起來很好的正則表達式的問題。
在我的開發機器上我使用php5.3.2與pcre 7.8庫和我的生產機器上我使用php5.2.4與pcre 7.4。
轉義括號:'(validated)' - >'\(validated \)' – nobody
爲什麼?乾草堆裏沒有括號。我想捕獲單詞'驗證',因爲它不是一個常數 – mulllhausen
您是否在兩臺機器上測試上面的確切隔離代碼? – nobody