2013-08-08 3 views
0

У меня есть некоторые URI, которые входят, и мне нужно захватить любые, имеющие «origin-xx» в поддомене, и только в субдомене. Я хочу, чтобы возвращаемое совпадение было равно любому шаблону ('xx').Мне нужно регулярное выражение, которое соответствует «origin-xx»

совпадений:

  • Origin-www.blahblah.com

    $match[0] = 'www'

  • Origin-uk.blahblah.com

    $match[0] = 'uk'

Не матч:

  • www.blahblah.com
  • www.origin.blahblah.com
  • www.blahorigin-blah.com
  • uk.blahblah.com

Спасибо заранее.

EDIT: Я не очень хорошо это сказал. Матч должен быть только подстановочным знаком. Так что если HTTP_HOST был origin-uk.blahblah.com, матч был бы uk. Я отредактировал приведенный выше пример, чтобы лучше отразить это.

EDIT 2: Я также должен был включить, что я делаю это PHP.

ответ

2

Какой вкус регулярного выражения? Это в PHP?

Попробуйте это:

$pattern = '/^Origin\-([^\.]+)\./'; 
preg_match($_SERVER['HTTP_HOST'], $pattern, $m); 
print $m[1]; 
+0

Очень близко, я не хочу «происхождение» или «.». быть в матче, хотя. Моя вина, я неправильно сформулировал этот вопрос. –

+0

@Ryan: $ m [1] не должен содержать Origin- или dot. Я не на моем компьютере, поэтому я не могу дважды проверить. –

+0

О, я, должно быть, что-то придумал. Вы правы, это делает именно то, что мне нужно, спасибо! Я просто хочу добавить, что я модифицировал его, используя предложение @ c.anna [Oo], чтобы зафиксировать либо «Происхождение», либо «происхождение». Я не указал, что в моем первоначальном вопросе, и все мои примеры были «O», поэтому мой последний шаблон был: /^[Oo]rigin\-([^\.]+)\./ –

1

Это регулярное выражение будет работать для субдомена: Origin-([a-z]{2}|www). Для полного, это может быть что-то вроде: Origin-([a-z]{2}|www)\.blahblah\.com

Вы можете использовать() для ссылки на группу захвата.

+0

Это не будет соответствовать ** Origin-www.blahblah.com **, как должно, говорится в вопросе. –

+0

Ах, извините. Теперь это так. –

+0

Теперь он соответствует ** Origin-wwwwww.blahblah.com ** из-за '{2}' после вашей группы захвата. –

1

Не зная больше параметров это будет работать /Origin-([a-zA-Z*?)\./

1

Итак, прежде всего, вы хотите, чтобы убедиться, что в самом начале строки является «origin», поэтому начинайте с ^, что означает начало строки. Тогда вы будете соответствовать любому тексту, вплоть до точки.

/^origin-([a-z]+)\./ 
+0

Очень близко, я не хочу «происхождение» или «.». быть в матче, хотя. Моя вина, я неправильно сформулировал этот вопрос. –

3

Попробуйте это:

(Origin-(www|uk)(\.(?:[a-zA-Z0-9](?:[_\-][a-zA-Z0-9]*)*)+)+\.com) 

Regular expression visualization

View on Debuggex

Это поймает оба ваших примеров и не поймать все ваши «Не сопоставить ".Если вам нужно что-то более или менее конкретное ... или другое, вам нужно уточнить.

+3

Проголосуйте за ссылку на debuggex. Это самый крутой инструмент, который я никогда раньше не использовал. Полюбуйтесь графическим дисплеем, это облегчает понимание беспорядочного кода регулярного выражения. –

+0

Мне нравится визуальное представление и объяснение, но я не большой поклонник продвигать скоро будущие инструменты здесь. Выглядит неплохо! –

2

Одно регулярное выражение, которое должно работать для вас: \b[oO]rigin-(\w+)\b. Вот ссылка RegExr: http://regexr.com?35sq3. В этом регулярном выражении группа 1 содержит интересующее вас значение. Поля \b нужны только для удаления совпадений в середине строки. Если вы знаете, что Origin будет в начале строки, вы могли бы заменить первый \b с ^ и последний с $

+0

Это происходит только в субдомене и является самой первой частью, поэтому^будет работать. Это работает для моего первоначального вопроса, но я это неправильно сформулировал. Я не хочу, чтобы «происхождение» было в матче, просто «www» или «uk» и т. Д. Извините. –

+0

Кроме того, спасибо за подсказку по ловлю как «O», так и «o», –

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