Java регулярное выражение для любого символа? - PullRequest
5 голосов
/ 03 декабря 2010

Есть ли регулярное выражение, которое принимает любой символ?

РЕДАКТИРОВАТЬ: Чтобы уточнить, что я ищу .. Я хочу построить регулярное выражение, которое будет принимать ЛЮБОЕ количество пробелов, и оно должно содержать по крайней мере 1символ (например,. "'$ £ и т. д.) или (не исключая или) не менее 1 символа.

Ответы [ 2 ]

7 голосов
/ 03 декабря 2010

Да. Точка (.) будет соответствовать любому символу, по крайней мере, если вы используете его вместе с флагом Pattern.DOTALL (в противном случае он не будет совпадать с символами новой строки). Из документов:

В режиме dotall выражение. соответствует любому символу, включая терминатор строки. По умолчанию это выражение не соответствует символу конца строки.


Относительно вашего редактирования:

Я хочу построить регулярное выражение, которое будет принимать ЛЮБОЕ количество пробелов, и оно должно содержать как минимум 1 символ (например,. "'$ £ и т. Д.) Или (не исключая или) не менее 1 символа.

Вот предложение:

\s*\S+
  • \s* любое количество пробельных символов
  • \S+ один или несколько ("хотя бы один") непробельных символов.
0 голосов
/ 03 декабря 2010

В Java символом является \pS, который не совпадает с символами пунктуации, которые \pP.

Я говорю об этой проблеме, а также перечисляю типы для всех знаков ASCII и символов, здесь, в этом ответе .

Шаблоны типа [\p{Alnum}\s] работают только с устаревшими наборами данных 1960-х годов.Чтобы работать с вещами с набором нативных символов Java, вам нужно что-то порядка

identifier_charclass = "[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]]";
whitespace_charclass = "[\\u000A\\u000B\\u000C\\u000D\\u0020\\u0085\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]";

ident_or_white = "[" + identifier_charclass + whitespace_charclass + "]";

Я сожалею, что Java затрудняет работу с современным набором данных, но, по крайней мере, это возможно.

Только не спрашивайте о границах или кластерах графем.Об этом см. мои другие сообщения .

...