Нет ничего плохого, по сути, с регулярным выражением. Он просто не соответствует указанной строке.
Вам нужно найти себе хороший справочник по регулярным выражениям и изучить основы. Одним из них является http://www.regular -expressions.info / . Это может быть, а может и не быть хорошей ссылкой на вас как на новичка. (Я использую его инструмент RegexBuddy для проверки вашего регулярного выражения.)
Вот грубая разбивка выражения:
- Есть три группы захвата, каждая из которых окружена собственной парой скобок. (Обратите внимание, что круглые скобки, наряду со многими другими символами, имеют особое значение в регулярных выражениях, поэтому для сопоставления скобок в любом направлении вам нужно избегать его. Данное регулярное выражение не делает этого.)
- В первой группе захвата есть два возможных варианта матча. Они есть:
- Один или несколько символов «слово», за которыми следуют ноль или более пробелов, или
- Тире, за которым следуют один или несколько символов "слова", за которыми следуют ноль или более пробелов
- Во второй группе захвата существует 10 возможных совпадений: перечисленные символы операторов (без окружающих пробелов) или перечисленные текстовые операторы (с окружающими пробелами)
- В третьей группе захвата будет совпадать ноль или более любого символа.
Строка 'product (getProduct_abc) в (Xyz)' не совпадает, потому что до оператора in
было больше, чем просто слова. Круглые скобки не считаются символами «слова» и поэтому приводят к сбою.
Вторая строка ('100 = product (getProduct_abc) в (Xyz)') совпадает, потому что она использует равенства ('=') в качестве сопоставленного оператора для второй группы захвата, '100' - это строка всех слова «символы» и все, что после «=», соответствует части «любой символ», поэтому сопоставление завершается успешно. Обратите внимание, что в зависимости от того, как обрабатывается конец строки, некоторые языки могут не совпадать даже с этой строкой, если она находится в самом конце строки.
Если первая строка предполагается, что совпадает, то вам необходимо проверить с бизнес-пользователями. Может быть, они тоже новички с регулярными выражениями, и дали вам тот, который не работает. ; -)