Regex соответствует словам и словам с апострофом
Обновление. В соответствии с комментариями относительно двусмысленности моего вопроса, я увеличил детали в вопросе.
(Терминология: по словам, я имею в виду любую последовательность буквенно-цифровых символов.)
Я ищу регулярное выражение, чтобы соответствовать следующему, дословно:
- Слова.
- Слова с одним апострофом в начале.
- Слова с любым числом несмежных апострофов по всей середине.
- Слова с одним апострофом в конце.
Я хотел бы сопоставить следующее, однако не дословно, а удаляя апострофы:
- Слова с апострофом в начале и в конце будут сопоставляться со словом, без апострофов. Таким образом,
'foo'
будет соответствовать foo
.
- Слова с более чем одним непрерывным апострофом в середине будут разделены на два разных слова: фрагмент перед смежными апострофами и фрагмент после смежных апострофов. Итак,
foo''bar
будет соответствовать foo
и bar
.
- Слова с более чем одним непрерывным апострофом в начале или в конце будут сопоставляться со словом без апострофов. Итак,
''foo
будет соответствовать foo
и ''foo''
до foo
.
<сильные > Примеры
Они будут сопоставляться дословно:
Но они будут проигнорированы:
И, для 'open'
, open
будет сопоставлено.
Ответы
Ответ 1
Попробуйте использовать это:
(?=.*\w)^(\w|')+$
'bout # pass
it # 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
Ответ 2
/('\w+)|(\w+'\w+)|(\w+')|(\w+)/
- '\ w + Соответствует a', за которым следует один или несколько альфа-символов, OR
- \w + '\ w + Matche sone или более альфа-символов, за которым следует символ', сопровождаемый одним или несколькими альфа-символами, OR
- \w + ' Соответствует одному или нескольким альфа-символам, за которыми следует'
- \w + Соответствует одному или нескольким альфа-символам
Ответ 3
Как насчет этого?
'?\b[0-9A-Za-z']+\b'?
EDIT: предыдущая версия не включает апострофы по бокам.
Ответ 4
Я представил этот второй ответ, потому что похоже, что вопрос изменился совсем немного, и мой предыдущий ответ больше недействителен. В любом случае, если все условия указаны вверху, попробуйте следующее:
(((?<!')')?\b[0-9A-Za-z]+\b('(?!'))?|\b[0-9A-Za-z]+('[0-9A-Za-z]+)*\b)
Ответ 5
Это прекрасно работает
('*)(?:'')*('?(?:\w+'?)+\w+('\b|'?[^']))(\1)
по этим данным нет проблем
'bou
it's
persons'
'open'
open
foo''bar
''foo
bee''
''foo''
'
''
по этим данным вы должны лишить результат (удалить пробелы из совпадений)
'bou it persons' 'open' open foo''bar ''foo ''foo'' ' ''
(тестируется в регуляторе, получается $2)