Здравствуйте. Есть ссылки: 1. resolution-1920x1440 2. resolution-1920x1440-orientation-landscape 3. resolution-1920x1440-orientation-landscape-sort-view Есть необходимость сделать валидацию ссылок, для этого написал регулярное выражение, но оно ищет только третью ссылку: PHP: /(resolution-([0-9x])+)(-)(orientation-(landscape|portrait)+)(-)(sort-(view|top|donloads|random)+)/i Как сделать, чтобы поиск был на 3 ссылки?
Добрый день! Так PHP: <? $urlStr = <<<EOF resolution-1920x1440 resolution-1920x1440-orientation-landscape resolution-1920x1440-orientation-portrait resolution-1920x1440-orientation-landscape-sort-view resolution1920x1440 resolution-1920x1440-orientation-landscape-sort resolution-1920x1440-orientation-landscape-tort-cookie EOF; $urlArr = explode(PHP_EOL, $urlStr); $pattern = "/^(resolution-\d+x\d+)((-orientation-(landscape|portrait))?)((-sort-(view|top|donloads|random))?)$/i"; foreach($urlArr as $url) echo $url," -> ", preg_match($pattern, $url), "<br>"; /* resolution-1920x1440 -> 1 resolution-1920x1440-orientation-landscape -> 1 resolution-1920x1440-orientation-portrait -> 1 resolution-1920x1440-orientation-landscape-sort-view -> 1 -> 0 resolution1920x1440 -> 0 resolution-1920x1440-orientation-landscape-sort -> 0 resolution-1920x1440-orientation-landscape-tort-cookie -> 0 */ Удачи!
Здравствуйте. Этот способ работает, если последовательно будут добавляться вхождения "resolution-1920x1440" -> "orientation-landscape" -> "sort-view", а если последовательность будет обратная, например "sort-view" -> "orientation-landscape"?
Добрый день! PHP: <? $urlStr = <<<EOF resolution-1920x1440 resolution-1920x1440-orientation-landscape resolution-1920x1440-orientation-portrait resolution-1920x1440-orientation-portrait-sort-top resolution-1920x1440-orientation-landscape-sort-view resolution-1920x1440-sort-view-orientation-landscape resolution-1920x1440-sort-view-orientation-portrait resolution1920x1440 resolution-1920x1440-orientation-landscape-sort resolution-1920x1440-orientation-landscape-tort-cookie EOF; $urlArr = explode(PHP_EOL, $urlStr); $pattern = "/^(resolution-\d+x\d+)"; $pattern .= "("; $pattern .= "((-orientation-(landscape|portrait))?)((-sort-(view|top|donloads|random))?)"; $pattern .= "|"; $pattern .= "((-sort-(view|top|donloads|random))?)((-orientation-(landscape|portrait))?)"; $pattern .= ")"; $pattern .= "$/i"; echo "\$pattern = \"$pattern\"<hr>"; foreach($urlArr as $url) echo $url," -> ", preg_match($pattern,$url),"<br>"; /* $pattern = "/^(resolution-\d+x\d+)(((-orientation-(landscape|portrait))?)((-sort-(view|top|donloads|random))?)|((-sort-(view|top|donloads|random))?)((-orientation-(landscape|portrait))?))$/i" resolution-1920x1440 -> 1 resolution-1920x1440-orientation-landscape -> 1 resolution-1920x1440-orientation-portrait -> 1 resolution-1920x1440-orientation-portrait-sort-top -> 1 resolution-1920x1440-orientation-landscape-sort-view -> 1 -> 0 resolution-1920x1440-sort-view-orientation-landscape -> 1 resolution-1920x1440-sort-view-orientation-portrait -> 1 -> 0 resolution1920x1440 -> 0 resolution-1920x1440-orientation-landscape-sort -> 0 resolution-1920x1440-orientation-landscape-tort-cookie -> 0 resolution1920x1440 -> 0 resolution-1920x1440-orientation-landscape-sort -> 0 resolution-1920x1440-orientation-landscape-tort-cookie -> 0 */ Удачи!
Пробовал добавлять "или" (|) в регулярку. Если первое вхождение не resolution, а "sort-view" то вхождение не найдено (если ссылка начинается как "sort-view-orientation-portrait" или просто "orientation-portrait"). Код (Text): resolution-1920x1440 -> 1 resolution-1920x1440-orientation-landscape -> 1 sort-view-orientation-portrait -> 0 orientation-portrait -> 0 sort-view -> 0 sort-view- -> 0
Добрый день! Если ещё чего-то забыли, просто добавьте примеры возможных URLs Это с дополненениями PHP: <? $urlStr = <<<EOF resolution-1920x1440 resolution-1920x1440-orientation-landscape resolution-1920x1440-orientation-portrait resolution-1920x1440-orientation-portrait-sort-top resolution-1920x1440-orientation-landscape-sort-view resolution-1920x1440-sort-view-orientation-landscape resolution-1920x1440-sort-view-orientation-portrait sort-view-orientation-portrait orientation-portrait sort-view sort-top resolution1920x1440 resolution-1920x1440-orientation-landscape-sort resolution-1920x1440-orientation-landscape-tort-cookie EOF; $urlArr = explode(PHP_EOL, $urlStr); $pattern = "/^((resolution-\d+x\d+)?)(-?)"; $pattern .= "("; $pattern .= "((orientation-(landscape|portrait))?)((-sort-(view|top|donloads|random))?)"; $pattern .= "|"; $pattern .= "((sort-(view|top|donloads|random))?)((-orientation-(landscape|portrait))?)"; $pattern .= ")"; $pattern .= "$/i"; echo "\$pattern = \"$pattern\"<hr>"; foreach($urlArr as $url) echo $url," -> ", preg_match($pattern,$url),"<br>"; /* $pattern = "/^((resolution-\d+x\d+)?)(-?)(((orientation-(landscape|portrait))?)((-sort-(view|top|donloads|random))?)|((sort-(view|top|donloads|random))?)((-orientation-(landscape|portrait))?))$/i" resolution-1920x1440 -> 1 resolution-1920x1440-orientation-landscape -> 1 resolution-1920x1440-orientation-portrait -> 1 resolution-1920x1440-orientation-portrait-sort-top -> 1 resolution-1920x1440-orientation-landscape-sort-view -> 1 resolution-1920x1440-sort-view-orientation-landscape -> 1 resolution-1920x1440-sort-view-orientation-portrait -> 1 sort-view-orientation-portrait -> 1 orientation-portrait -> 1 sort-view -> 1 sort-top -> 1 resolution1920x1440 -> 0 resolution-1920x1440-orientation-landscape-sort -> 0 resolution-1920x1440-orientation-landscape-tort-cookie -> 0 */ Удачи! p.s. Вам не нужно столько URLs resolution и orientation можно определить в коде с помощью CSS media queries.
Спасибо, последний вариант работает как нужно было. Все вероятные значения resolution и orientation получаю из БД, вывожу через select