Обновление: Согласно комментариям относительно неоднозначности моего вопроса, я увеличил деталь в вопросе.
(Терминология: словами я обращаюсь к любой последовательности алфавитно-цифровых символов.)
Я ищу regex для соответствия следующему, дословно:
Я хотел бы соответствовать следующему, однако не дословно, скорее удаляя апострофы:
'foo'
был бы подобран к foo
.foo''bar
был бы подобран к foo
и bar
.''foo
был бы подобран к foo
и ''foo''
кому: foo
.Примеры Они были бы подобраны дословно:
'bout
it's
persons'
Но они были бы проигнорированы:
'
''
И, для 'open'
, open
был бы подобран.
Как насчет этого?
'?\b[0-9A-Za-z']+\b'?
РЕДАКТИРОВАТЬ: предыдущая версия не включает апострофы по бокам.
(? =. * \ W) ^ (\ w | ') + $
'bout # pass
it's # pass
persons' # pass
' # fail
'' # fail
NODE EXPLANATION
(?= look ahead to see if there is:
.* any character except \n (0 or more times
(matching the most amount possible))
\w word characters (a-z, A-Z, 0-9, _)
) end of look-ahead
^ the beginning of the string
( group and capture to \1 (1 or more times
(matching the most amount possible)):
\w word characters (a-z, A-Z, 0-9, _)
| OR
' '\''
)+ end of \1 (NOTE: because you're using a
quantifier on this capture, only the LAST
repetition of the captured pattern will be
stored in \1)
$ before an optional \n, and the end of the
string
/('\w+)|(\w+'\w+)|(\w+')|(\w+)/
Это отлично работает
('*)(?:'')*('?(?:\w+'?)+\w+('\b|'?[^']))(\1)
с этими данными без проблем
'bou
it's
persons'
'open'
open
foo''bar
''foo
bee''
''foo''
'
''
с этими данными вы должны удалить результат (удалить пробелы из совпадений)
'bou it's persons' 'open' open foo''bar ''foo ''foo'' ' ''
(протестировано в The Regulator, результат - 2 доллара)
{{1} }Я отправил этот второй ответ, потому что похоже, что вопрос немного изменился, и мой предыдущий ответ больше не действителен. В любом случае, если перечислены все условия, попробуйте следующее:
(((?<!')')?\b[0-9A-Za-z]+\b('(?!'))?|\b[0-9A-Za-z]+('[0-9A-Za-z]+)*\b)