ниже приведено упрощение регулярного выражения, которое я использую. на моей машине разработки и $pattern1
и $pattern2
возвращают совпадение, однако на моей производственной машине только $pattern1
возвращает совпадение! очевидно, единственное различие между $pattern1
и $pattern2
состоит в том, что у одного из них есть квадратные скобки вокруг слова. однако оба являются допустимыми шаблонами, которые должны соответствовать данному стогу сена (насколько я знаю).
$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);
кто-нибудь раньше обнаруживал эту проблему? обратите внимание, что это не все регулярные выражения - это упрощенная версия, которую я определил как проблему. в моем реальном коде значение 'validated' не является константой, поэтому я использую квадратные скобки для захвата слова. Конечно, в шаблонах есть и другие символы в скобках, так что я могу захватить здесь переменные слова. это просто упрощенный пример, который оттачивает проблему, с которой я сталкиваюсь, с двумя, казалось бы, хорошими регулярными выражениями.
на моей машине для разработки я использую php5.3.2 с библиотекой pcre 7.8, а на своей рабочей машине я использую php5.2.4 с pcre 7.4.