2011-02-03 4 views
0
/any_string/any_string/any_number 

с этим регулярным выражением:проблема с регулярными выражениями PHP

/(\w+).(\w+).(\d+)/ 

Это работает, но мне нужен этот URL:

/specific_string/any_string/any_string/any_number 

И я не знаю, как получить его. Благодарю.

+0

Что вы подразумеваете под * мне нужен этот url *? Не совпадает ли ваше выражение со вторым URL? Btw. ваше выражение должно включать '/' вместо * любого символа '.' *, например. путем изменения разделителя: '~ (\ w +)/(\ w +)/(\ d +) ~'. Также обратите внимание, что '\ w +' не соответствует * любой строке *, но * любой строке символа слова *. –

ответ

1

/(specific_string).(\w+).(\w+).(\d+)/

Хотя отмечают, что . s в вашем регулярном выражении технически соответствуют любой характер и не только /

/(specific_string)\/(\w+)\/(\w+)\/(\d+)/

Это будет соответствовать только косые черты.

0

Это один будет соответствовать второй URL:

"/(\w+)\/(\w+)\/(\w+)\/(\d+)/" 
0

Просто вставьте specific_string в регулярном выражении:

/specific_string\/(\w+)/(\w+)/\d+)/ 
0

Другим вариант с внешними ограничителями изменен, чтобы избежать посторонние вытекания:

preg_match("#/FIXED_STRING/(\w+)/(\w+)/(\d+)#", $_SERVER["REQUEST_URI"], 
0

я хотел бы использовать что-то вроде этого:

"/\/specific_string\/([^\/]+)\/([^\/]+)\/(\d+)/" 

Я использую [^\/]+, потому что это будет соответствовать любому, что не является sl зола. \w+ будет работать почти все время, но это также будет работать, если где-то есть неожиданный символ. Также обратите внимание, что для моего регулярного выражения требуется косая черта.

Если вы хотите, чтобы получить немного более сложным, следующее регулярное выражение будет соответствовать как паттернов вы обеспечили:

"/^(?:\/specific_string)*\/([^\/]+)\/([^\/]+)\/(\d+)$/" 

это будет соответствовать:

"/any_string/any_string/any_number" 
"/specific_string/any_string/any_string/any_number" 

но это не

"/some_other_string/any_string/any_string/any_number" 
Смежные вопросы