Мне нужно извлечь из строки набор символов, которые находятся между двумя разделителями, не возвращая сами разделители.
Простой пример должен быть полезен:
Цель : извлечь подстроку в квадратных скобках, не возвращая сами скобки.
Базовая строка :This is a test string [more or less]
Если я использую следующие рег. ех.
\ [. *? \]
Матч есть [more or less]
. Мне нужно только получить more or less
(без скобок).
Возможно ли это сделать?
Ответы:
Легко сделано:
Технически это использует lookaheads и lookbehinds. Смотрите Lookahead и Lookbehind Утверждения нулевой ширины . Шаблон состоит из:
В качестве альтернативы вы можете просто взять то, что находится в квадратных скобках:
и вернуть первую захваченную группу вместо всего совпадения.
источник
This is a test string [more [or] less]
будет ли это возвращениеmore [or] less
?Если вы используете JavaScript , первое решение, предоставленное cletus,
(?<=\[)(.*?)(?=\])
не будет работать, потому что JavaScript не поддерживает оператор lookbehind.Однако второе решение работает хорошо, но вам нужно получить второй соответствующий элемент.
Пример:
Он вернется:
Итак, что вам нужно, это второе значение. Использование:
Возвращаться:
источник
Вам просто нужно «захватить» бит между скобками.
Для захвата вы положите его в скобки. Вы не говорите, на каком языке это используется. Например, в Perl вы могли бы получить к нему доступ, используя переменную $ 1.
Другие языки будут иметь разные механизмы. Например, в C # используется класс коллекции Match .
источник
[^\[]
Подберите любой символ, который не [.+
Совпадение 1 или более из всего, что не является[
. Создает группы из этих матчей.(?=\])
Позитивный взгляд]
. Совпадает с группой, заканчивающейся]
без включения ее в результат.Готово.
Доказательство.
http://regexr.com/3gobr
Аналогично решению, предложенному null. Но дополнительного
\]
не требуется. В качестве дополнительного примечания, по-видимому\
, не требуется экранировать[
после^
. Для удобства чтения я бы оставил это в.Не работает в ситуации, в которой разделители идентичны.
"more or less"
например.источник
PHP:
источник
Чтобы удалить также [] используйте:
источник
У меня была та же проблема с использованием регулярных выражений с сценариями Bash. Я использовал двухэтапное решение, используя трубы с применением grep -o
будет первый
Очевидно, не так эффективно, как другие ответы, но альтернатива.
источник
Это специально работает для синтаксического анализатора регулярных выражений JavaScript
/[^[\]]+(?=])/g
просто запустите это в консоли
источник
Я хотел найти строку между / и #, но # иногда необязательно. Вот регулярное выражение, которое я использую:
источник
Вот как я получил без '[' и ']' в C #:
Выход:
источник
Если вам нужно извлечь текст без скобок, вы можете использовать bash awk
echo " [hola mundo] " | awk -F'[][]' '{print $2}'
результат:
hola mundo
источник