Regex для поиска текста между вторым и третьим слешем

Я хотел бы захватить текст, который происходит после второй косой черты и до третьей косой черты в строке. Пример:

/ IPAddress / имя_базы_данный /

Мне нужно захватить только имя базы данных. Имя базы данных может содержать буквы, цифры и подчеркивания. Благодарю.

 遊星不動06 мар. 2019 г., 01:16
stackoverflow.com/questions/55013368/... Может кто-нибудь посмотреть мой вопрос здесь?
 遊星不動06 мар. 2019 г., 01:22
Может кто-то просмотреть и помочь с этой ссылкой?stackoverflow.com/questions/55013368/...
 Sanjay Manohar30 мая 2013 г., 02:27
из какого контекста вы запускаете регулярное выражение? хитрость с этими проблемами обычно состоит в том, чтобы избежать ошибок, и это зависит от контекста.
 Adrian Pronk30 мая 2013 г., 02:24
Вы гарантированно будете иметь только 3 слеша?

Ответы на вопрос(6)

Вы можете еще более сократить шаблон, пройдя по этому пути:

[^/]+/(\w+)

Вот\w включает в себя символы, такие какA-Z, a-z, 0-9 and _

Я бы предложил вам датьSPLIT функции приоритета, так как я испытал их хорошую производительность по сравнению с функциями RegEx везде, где это возможно.

Решение Вопроса

То, как вы к нему обращаетесь, зависит от вашего языка, но выЯ просто хочу группу захвата для всего, что находится между вашим вторым и третьим "/", Предполагая, что ваша строка всегда имеет ту же форму, что и ваш пример, это будет:

/.*/(.*)/

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

/.*/(.*?)/
 Eli30 мая 2013 г., 06:12
@ Исаак не долженне имеет значения, если OP всегда имеет ровно три слеша, как я уже упоминал. Если он может иметь другую форму (то есть четыре косых черты), весь вопрос и ответ изменится, и оннам нужно указать, что он хочет в этой ситуации (третий слеш должен или не должен быть захвачен), чтобы мы решили, какой подстановочный знак должен быть жадным.
 user243454930 мая 2013 г., 16:42
строка продолжается несколькими словами и косой чертой, иногда до 10. Я должен был быть более конкретным, извините. Типичным примером может быть / IPaddress / база данных / проблема / проблема / проблема / проблема и т. д. Еще раз спасибо.
 Eli31 мая 2013 г., 20:58
@ user2434549 в этом случае выхочу/.*/(.*?)/, Я'Мы также обновили ответ.
 Isaac30 мая 2013 г., 06:03
не должен»не ленивый, а жадный?

ты можешь использоватьexplode функция сPHP или жеsplit с другими языками, чтобы такая операция.

В любом случае, вот шаблон регулярных выражений:

/[\/]*[^\/]+[\/]([^\/]+)/

Регулярное выражение будет:

/[^/]*/([^/]*)/

поэтому в Perl оператор захвата регулярных выражений будет выглядеть примерно так:

($database) = $text =~ m!/[^/]*/([^/]*)/!;

Обычно/ символ используется для разделения регулярных выражений, но так как онииспользуется как часть матча, другой символ может быть использован. В качестве альтернативы/ символ может быть экранирован:

($database) = $text =~ /\/[^\/]*\/([^\/]*)\//;

Я знаю, что вы специально попросили регулярное выражение, но вы недля этого действительно нужно регулярное выражение. Вам просто нужно разделить строку разделителями (в данном случае это обратный слеш), а затем выбрать нужную часть (в данном случае 3-е поле - первое поле пустое).

cut пример:

cut -d '/' -f 3 < "$string"
/.*?/(.*?)/

Если ваши строки всегда/ в конце строки:

([^/]*)/$

чередоватьsplit метод:

split("/")[2]
 probrandono06 июл. 2016 г., 01:00
Прекрасное дополнение метода раскола. Спасибо

Ваш ответ на вопрос