2016-04-07 3 views
-1

У меня есть строка ниже, и я пытаюсь сделать preg_replace на все, что не соответствует номеру версии 12c, используя регулярное выражение.PHP Invert/Negate Regex Pattern

Вы можете увидеть working match

Выражение Я использую соответствует формату 12c строки, но я не могу показаться, чтобы выяснить, как или, если это возможно, чтобы инвертировать/отрицать матч регулярного выражения, так вместо того, чтобы заменить 12c, замените все, кроме 12c, так что функция preg_match возвращает только 12c из 11g и т. д.

Код:

preg_match('/(\s[0-9]{2}[a-z]{1}\s)/', '', 'Oracle Database 12c Enterprise Edition Release 12.1.0.0.2 - 64bit Production with the Partitioning, OLAP, Data Mining and Real Application Testing option'); 

Выкройка:

/(\s[0-9]{2}[a-z]{1}\s)/ 

Строка:

Oracle Database 12c Enterprise Edition Release 12.1.0.0.2 - 64bit Production with the Partitioning, OLAP, Data Mining and Real Application Testing option 
+0

Ну, это немного неясно. Просьба уточнить * заменить все, кроме 12c, так что только функция 12c из 11g и т. Д. Возвращается функцией preg_match *. –

+0

Стоит отметить, что ваше текущее регулярное выражение также будет соответствовать '64b' с 64-битной, если будет дан шанс. – apokryfos

+0

@apokryfos достаточно, чтобы изменить шаблон - '([0-9] {2} [a-z] {1} (? = \ W | $)))' – splash58

ответ

1

Если я правильно понял, вы ва nt, чтобы получить текст, сопоставленный с рисунком:

if (preg_match('/([0-9]{2}[a-z]{1})/', 'Oracle Database 12c Enterprise Edition Release 12.1.0.0.2 - 64bit Production with the Partitioning, OLAP, Data Mining and Real Application Testing option', $m)) 
    echo $m[1]; // 12c