Какой смысл позади пересечений класса символов в Regex Java?

Как все старперы, я хотел бы ответить на это с историей от моей собственной жизни.

я начал программировать основной на VIC-20. Не зная ничто больше, я, хотя это было то, как были запрограммированы все компьютеры. Я думал, что было немного трудно отслеживать, которых имен переменной я использовал и которые были все еще свободны, (проблема объема). Я также думал, что было трудно разделить мою программу на повторяемые блоки с помощью gosub-возврата и установив и читая переменные, которые они будут использовать, (отсутствие методов).

Тогда я вошел в Turbo C по MS-DOS. Теперь я мог создать свои собственные методы и функции! Я больше не застревал со старым конечным множеством команд в основном. Я чувствовал, что создавал новый язык для каждой программы, которую я записал. C дал мне более выразительное питание.

C++ был первым объектно-ориентированным языком, о котором я слышал. Большой момент для меня был, когда я понял, что мог создать свои собственные типы данных, и даже перегрузить операторы. Снова, было такое чувство, что я мог создать свой собственный язык, содержащий и новые функции и типы данных, вместе с операторами.

Это - то, как я продал бы OO новому программисту. Объясните, что это дает выразительное питание, потому что они могут определить свои собственные типы данных. Я всегда думал, что инкапсуляция была лучшим коммерческим аргументом, чем наследование.

11
задан Christopher 9 July 2009 в 21:30
поделиться

4 ответа

Хотя у меня никогда не было необходимости делать Итак, я мог представить себе использование предопределенных классов символов, которые не являются подходящими подмножествами друг друга (таким образом, пересечение создает нечто отличное от исходных двух классов символов). Например, соответствие только строчным латинским символам:

[\p{Ll}&&\p{InBasicLatin}]
4
ответ дан 3 December 2019 в 11:04
поделиться

you can build a matching regexp between two sets programatically:

String regex = String.format("[%s&&[%s]]", characterClass, whiteList);
1
ответ дан 3 December 2019 в 11:04
поделиться

I believe that particular sample is just a "proof of concept." Two intersected character classes only match a character that matches both character sets individually. The substractions you mentioned are the real practical applications of the operator.

Simply put, there is no hidden meaning.

1
ответ дан 3 December 2019 в 11:04
поделиться

Пересечение полезно, когда один класс не является подмножеством другого набора. Существует множество предопределенных классов символов (частичный список приведен в javadoc ), в частности, различные блоки Unicode. Предположим, что существует определенный блок для всех символов, используемых в китайском языке, и один блок для всех символов, используемых в японском языке. Есть хорошее перекрытие, но оно не полное с обеих сторон (я не уверен, отражают ли это классы блоков Unicode). Если вы хотите сопоставить только символы, встречающиеся на обоих языках, вы можете использовать их пересечение.

1
ответ дан 3 December 2019 в 11:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: