Что идентифицирует строку?Кавычки.В вашем случае: одинарные кавычки.
Поэтому мы хотим сопоставить содержимое между кавычками в виде строки.Для этого мы можем использовать следующее ленивое регулярное выражение:
'.*?'
Чтобы разрешить обе кавычки, вы можете использовать: '.*?'|".*?"
или то же самое с обратной ссылкой (['"]).*?\1
.
Еслиразрешено экранировать строки, это становится еще сложнее.Для этого я предлагаю использовать рекурсивное регулярное выражение:
((['"])(?>[^'"\\]++|\\.|(?1))*+\2)
Сэмплы совпадают :
a = "abc dsfsd", b= ' abc dsfsd'
c ="abc\" dsfsd"
d= "abc\\"
Для соответствия любым идентификаторам, кроме строк, которые вы можете использовать:
[a-z]+(?=([^']*['][^']*['])*[^']*$)
(или здесь версия, которая соответствует обоим типам цитат: [a-z]+(?=([^'"]*(["'])[^"']*\2)*[^"']*$)
)
Опять же, она становится более сложной, если вы хотите учесть экранированные кавычки:
[a-z]+(?=([^"'\\]*(\\.|(["'])([^"'\\]*\\.)*[^"'\\]*\3))*[^"']*$)
Надеюсь, это поможет.