[^ s|x|y|z|ch|sh|a|e|i|o|u]
Это перевернутый символ класса. Символьные классы соответствуют одному символам, поэтому в вашем случае он будет соответствовать любому символу, кроме одного из них: acehiosuxyz |
. Обратите внимание, что это будет не уважать сложные группы, такие как ch
и sh
, а |
фактически интерпретируются как символы строк, которые просто появляются несколько раз в классе символов (где дубликаты просто игнорируются).
Так что это на самом деле эквивалентны следующий класс символов:
[^acehiosuxyz |]
Вместо этого вам придется использовать отрицательный взгляд назад, чтобы убедиться, что завершающая s
является не предшествует какой-либо из характера последовательности:
.*(?<!.[ sxyzaeiou]|ch|sh)s
Это одна есть проблема, что он не будет в состоянии соответствовать два символьных слов, так как, чтобы иметь возможность использовать внешний вид задом, вид сзади должен иметь фиксированный размер.И чтобы включить как одиночные символы, так и группы с двумя символами в обратном порядке, мне пришлось добавить другого персонажа к совпадениям одного символа. Однако вы можете использовать два отдельных выглядеть задом вместо:
.*(?<![ sxyzaeiou])(?<!ch|sh)s
Как LarsH упоминалось в комментариях, если вы действительно хотите, чтобы соответствовать слова, которые заканчиваются с этим, вы должны добавить какой-то границы в конце выражения. Если вы хотите совместить конец строки/строки, вы должны добавить $
, и в противном случае вы должны хотя бы добавить границу слова \b
, чтобы убедиться, что слово фактически заканчивается.
Вам нужно проверить границу слова или значение '' 'именно этого слова? – LarsH
Возможно, вы захотите также рассмотреть символы пробелов. Поскольку вы заявляете, что хотите проверить, заканчивается ли слово с определенной последовательностью символов, вы, вероятно, не хотите сопоставлять словосочетания, к которым применяются эти условия. Поэтому обязательно включите '\ s' в свой шаблон. – Xiphias