2013-06-18 2 views
0

Я не знаю, как игнорировать элемент из ER.как игнорировать символ в регулярном выражении

просто нужно получить P1, но это возвращает/P1.

можно просто игнорировать планку?

$pattern = "#(/P[0-9])?#"; 
+0

, что вы имеете в виду? какие строки должны совпадать, какие части должны быть возвращены? можете ли вы привести примеры –

+0

переместить '/' за пределы (группы). –

+0

Вопросительный знак '?' Не имеет смысла, удалите его. – HamZa

ответ

4

Есть два варианта здесь:

  • Исключить его из группы, P1 будет содержанием в группе захвата:

    $pattern = "#/(P[0-9])#"; 
    
  • Используйте просмотр назад, так что / не участвует в розыгрыше, в этом матче P1:

    $pattern = "#(?<=/)P[0-9]#"; 
    

Обратите внимание, что я удалил ? после вашей группы, потому что я не думаю, что вы на самом деле хотите, это делает предыдущий элемент необязательным, поэтому регулярное выражение будет соответствовать (/P[0-9])? буквального любой строки (она будет совпадать с пустая строка, если /P[0-9] не может быть сопоставлена).

+0

Я использую preg_replace и не работал –

+0

@PapaCharlie Просьба привести несколько примеров ввода образца и ожидаемого результата. –

+0

preg_replace ("#BLOG (/ P [0-9]) #", "$ 1", "BLOG/P6"); // output:/P6 // expected: 6 –

0

С preg_ * функции, вы можете использовать \K трюк, возвращаются в исходное начало матча, пример:

$pattern = '~/\KP[0-9]~';