Решение Тима работает довольно хорошо, если вы можете использовать lookaround (который поддерживает Java).Но если вам нужно использовать язык или инструмент, который не поддерживает обходные пути, вы можете просто сопоставить оба случая (строки в двойных кавычках и строки в одинарных кавычках):
"(\\"|[^"])*"|'(\\'|[^'])*'
соответствует каждому случаю отдельно, но возвращаетв любом случае как полное совпадение
ОДНАКО
Оба случая могут стать жертвами хотя бы одного случая.Если вы не присмотритесь, вы можете подумать, что в этом отрывке должно быть два матча:
Он повернулся, чтобы сесть на велосипед.«Увидимся позже, когда я закончу со всем этим», - сказал он, оглядываясь на мгновение, прежде чем начать свое путешествие.Когда он вышел на улицу, одна из городских тележек столкнулась с велосипедом Майка."О боже!"воскликнул наблюдатель.
... но есть три совпадения, а не два:
"I'll see you later, when I'm done with all this"
's trolleys collided with Mike'
"Oh my!"
, и этот отрывок содержит только ONE матч:
Однако бой еще не закончился."Привет!"крикнул Боб."Чего ты хочешь?"Я ответил."Я ненавижу твои кишки!""Зачем мне все равно?""Потому что я тебя люблю!""Ты сделаешь?"Боб остановился на мгновение, прежде чем прошептать: «Нет, я не могу тебя любить!»
Ты можешь найти это?: D
't over yet, though. "Hey!" yelled Bob. "What do you want?" I retorted. "I hate your guts!" "Why would I care?" "Because I love you!" "You do?" Bob paused for a moment before whispering "No, I couldn'
Я бы порекомендовал (если вы готовы использовать lookaround), чтобы вы рассмотрели некоторые дополнительные проверки (например, положительный просмотр за пробелами или аналогичные перед первой цитатой), чтобы убедиться, что выне подходите к вещам вроде 's trolleys collided with Mike'
- хотя я бы не стал вкладывать много денег в какое-либо решение без большого количества тестирования.Добавление (?<=\s|^)
в начало любого выражения позволит избежать вышеупомянутых случаев ... т.е.:
(?<=\s|^)(["'])(?:\\.|(?!\1).)*\1 #based on Tim's
или
(?<=\s|^)("(\\"|[^"])*"|'(\\'|[^'])*') #based on my alternative
Я не уверен, насколько эффективен поиск по сравнению сне имеет смысла, поэтому два приведенных выше могут быть эквивалентными, или один может быть более эффективным, чем другой (?)