2013-11-15 2 views
2

Что-то, что я не мог понять со словом границы.Альтернативы словесной границы слова в круглых скобках не работают?

$input="157-XYZ"; 
preg_match("/[^\d+\-]\bRDS|xyz|ABC\b/i", $input, $output); 

выше preg_match соответствует XYZ в $input.

Однако, если я помещаю альтернативы в круглые скобки /[^\d+\-]\b(RDS|xyz|ABC)\b/i, он, кажется, ничего не возвращает. Не могу ли я использовать круглые скобки здесь, чтобы получить результат от $output[1]?

+0

В настоящее время вы регулярное выражение соответствует: '[^ \ d + \ -] \ bRDS' ИЛИ' xyz' ИЛИ 'ABC \ b'. Таким образом, строка «XYZ», конечно, сопоставляется. Опишите шаблон, который вы хотите сопоставить, и, возможно, мы сможем помочь вам исправить вашу попытку. – OGHaza

ответ

1

Это регулярное выражение неверно:

preg_match("/[^\d+\-]\bRDS|xyz|ABC\b/i", $input, $output); 

С: [^\d+\-] означает матч все, кроме:

  1. цифры
  2. буквального +
  3. буквального -

Вы можете просто использовать:

preg_match("/^\d+\-\b(RDS|xyz|ABC)\b/i", $input, $output); 
+0

как вы можете знать, что он пытается совместить? – OGHaza

+0

@OGHaza: Я не вижу буквального '+' в вопросе ИЛИ ввода, но присутствует в символьном классе. Что является показателем того, что OP пытается сопоставить '\ d +' – anubhava

+0

, мы скоро узнаем ... – OGHaza

Смежные вопросы