Мне было интересно, как вы можете найти слова со специальными символами в предложении, во всей общности.
Например, если у нас есть следующее предложение
I love (#coo$kies) the following cookies: $cookie[1], $cookie[2, @cookie, @cookie%, hot@dog
Оставьте в стороне тот факт, что переменные не должны использоваться в строке. Что такое регулярное выражение для получения ‘# coo $ kies’ $cookie[1]
, $cookie[2
, @cookie
, @cookie%
, hot@dog
и не I
, love
… cookies
(или же cookies:
).
Я использовал следующее регулярное выражение:
'#(\S+(?!\w+))#'
но отрицание не работает, и я получаю каждое слово обратно («я», «любовь» … «печенье:»).
Нет способа получить $cookie[2]
поскольку это не присутствует в исходной строке.
В остальном нужно разделять слова разделителями. [ ,:]
и специальные символы, которые являются частью слова: [\$\[\]\@\%]
, Это должно быть что-то вроде этого:
((\w*[\$\[\]\@\%]+\w*)+?)[ ,:]*
Если вы можете, добавьте пробел в конец строки источника, чтобы вы могли использовать обязательные разделители без потери последнего слова:
((\w*[\$\[\]\@\%]+\w*)+?)[ ,:]+