RegEx: Захват значений между кавычками

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

203
задан Alan Moore 15 March 2014 в 06:32
поделиться

5 ответов

Я использовал следующее с большим успехом:

(["'])(?:(?=(\\?))\2.)*?\1

Это поддерживает вложенные кавычки также.

Для тех, кто хочет более глубокое объяснение того, как это работает, вот объяснение от пользователя ephemient:

([""']) соответствуют кавычке; ((?=(\\?))\2.), если обратная косая черта существует, пожрите ее, и происходит ли это, соответствуйте символу; *? соответствие много раз (нежадно, относительно не едят заключительную кавычку); \1 соответствуют той же кавычке, которая была использованием для открытия.

326
ответ дан Community 23 November 2019 в 04:55
поделиться
echo 'junk "Foo Bar" not empty one "" this "but this" and this neither' | sed 's/[^\"]*\"\([^\"]*\)\"[^\"]*/>\1</g'

Это приведет к:> Нечто Bar<> <>, но this<

Здесь я показал строку результата между> < для ясности, также с помощью нежадной версии с этим sed управляют, чтобы мы сначала вывели спам прежде и после этого ""и затем заменили это частью между" "и окружили это> <.

1
ответ дан amo-ej1 23 November 2019 в 04:55
поделиться

Эта версия

  • составляет завершенные кавычки
  • средства управления, отслеживающие в обратном порядке

    /(["'])((?:(?!\1)[^\\]|(?:\\\\)*\\[^\\])*)\1/
    
6
ответ дан 2 revs, 2 users 91% 23 November 2019 в 04:55
поделиться

Я пошел бы для:

"([^"]*)"

[^ "] regex для любого символа кроме' " '
причина, я использую это по не жадный многие, оператор - то, что я должен продолжать искать это только, чтобы удостовериться, что я получаю его корректный.

80
ответ дан Martin York 23 November 2019 в 04:55
поделиться

В целом следующий фрагмент регулярного выражения - то, что Вы ищете:

"(.*?)"

Это использует нежадное *? оператор для получения всего до, но не включая следующую двойную кавычку. Затем Вы используете определенный для языка механизм для извлечения подобранного текста.

В Python, Вы могли сделать:

>>> import re
>>> string = '"Foo Bar" "Another Value"'
>>> print re.findall(r'"(.*?)"', string)
['Foo Bar', 'Another Value']
296
ответ дан Rodrigo Deodoro 23 November 2019 в 04:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: