У меня есть этот тип URL:
https://example.com/en/app/893245 https://example.com/ru/app/wq23245 https://example.com/app/8984245
Я хочу извлечь только слово между com и app
com
app
https://example.com/en/app/893245 -> en https://example.com/ru/app/wq23245 -> ru https://example.com/app/8984245 ->
Я пытался исключить приложение из группы захвата, но я не знаю, как это сделать, кроме как вот так:
.*com\/((?!app).*)\/app
Возможно ли что-то подобное, но исключить захват слова app? example\.com\/(\w+|?!app)\/
example\.com\/(\w+|?!app)\/
Рубулярная ссылка: https://rubular.com/r/NnojSgQK7EuelE
Если вам нужно простое регулярное выражение, вы можете использовать lookarounds :
/(?<=example\.com\/)\w+(?=\/app)/
Или, возможно, лучше в контексте URL:
/(?<=example\.com\/)[^\/]+(?=\/app)/
См. Демонстрационную версию Rubular .
В Ruby вы можете использовать
strs = ['https://example.com/en/app/893245','https://example.com/ru/app/wq23245','https://example.com/app/8984245'] strs.each { |s| p s[/example\.com\/(\w+)\/app/, 1] } # => ["en", "ru", nil]
вы можете использовать sed
sed
sed -n -f script.sed yourinput.txt
и внутри script.sed:
s/.*com\/\(.*\)\/app.*/\1/p
Пример ввода:
Пример вывода:
$ sed -n -f comapp.sed comapp.txt en ru