Из приведенного сообщения об ошибке, которое совсем не похоже на показанное строковое регулярное выражение, я делаю вывод, что исходный шаблон был по существу следующим: я взял на себя смелость переформатировать, добавить символические константы и предвосхитить номера строк что мы могли бы проверить и решить его более легко.
(Все нетривиальные шаблоны должны всегда записываться в режиме (?x)
- даже несмотря на то, что Java сражается против вас, вы все равно должны это делать.)
1 (?: \P{L} | \W | ^ )
2 (
3 (?: \N{KATAKANA LETTER BE} \N{KATAKANA LETTER SU}
4 | \N{KATAKANA LETTER BE} \N{KATAKANA LETTER SU}
5 | \N{KATAKANA LETTER HE} \N{KATAKANA LETTER ZU}
6 )
7 (?: \N{KATAKANA LETTER PA} )
8 |
9 \N{KATAKANA LETTER PA}
10 )
11 |
12 \N{KATAKANA LETTER HA}
13 )
14 \N{COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK}
15 )
16 (?: \b | $ )
Первая и последняя строки неверны, но они неверны в семантическом способе, связанном с неработающими регулярными выражениями Java. Они не синтаксически неправильно.
Как теперь должно быть очевидно, синтаксическая проблема заключается в том, что закрывающие скобки в строках 13 и 15 являются ложными: у них нет соответствующих открытых скобок.
Несмотря на первые и последние строки, я все еще пытаюсь понять, что вы действительно пытаетесь сделать здесь. Почему дублирование строк 3 и 4? Это не делает ничего полезного. И я не вижу причин для группировки в строке 7.
Намерено ли разрешить использование знака комбинирования для какой-либо из предшествующих вещей?
Что касается ошибок в первой и последней строках, понимаю ли я, что простая граница слова - это все, что вы ищете? Вы действительно хотите включить эти граничные символы в свой матч или просто пытаетесь установить границы? Почему вы говорите не букву или не слово?
Символы слова делают включают буквы, вы знаете - по крайней мере, согласно спецификации Unicode, которую они делают, даже если Java действительно ошибается. Увы, вы только что включили связку букв из-за ошибки регулярного выражения Java, поэтому нам придется перекодировать ее, как только я пойму, чего вы действительно хотите.
Если бы вы использовали что-то действительно совместимое с UTS # 18, это работало бы нормально, но, как я полагаю, вы этого не сделали (я не слышал упоминаний об отделении интенсивной терапии), мы должны будем исправить это так, как я иметь ранее изложенные .
Предварительный просмотр для неслова или начала строки будет работать для первого, а предварительный просмотр для неслова или конца строки будет работать для последнего. Это то, что \b
, конечно, должен делать, когда сталкиваетесь с символами слова, как у вас здесь, и это может даже сработать, если вы будете держаться подальше от несловесной частицы.
Но пока я не увижу больше первоначального намерения, я не думаю, что должен сказать больше.