2009-07-04 2 views
3

Мне нужно получить регулярное выражение, которое соответствует всем управляющим символам Юникода, за исключением возврата каретки (0x0d), строки (0x0a) и табулятора (0x09). В настоящее время мое регулярное выражение выглядит так:Соответствующие символы управления Юникодом, за исключением трех с регулярными выражениями

/\p{C}/u 

Мне просто нужно определить эти три исключения сейчас.

+0

Является ли это для PHP? Чтобы дать вам лучший ответ, нам нужно знать, какой аромат регулярного выражения вы используете. Ответ Дарта Эру будет работать на PHP, но другие вкусы потребуют другого подхода. –

+0

О, извините. Да, Perl совместимые регулярные выражения, которые использует PHP. – Tower

ответ

6

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

/(?![\x{000d}\x{000a}\x{0009}])\p{C}/u 

Для этого используется отрицательный lookahead, чтобы утверждать, что символ не является одним из указанных в классе символов. Затем он снова пересекает символ, чтобы соответствовать ему с любым управляющим символом.

Я использовал синтаксис perl для указания одиночных точек юникода.

Более подробное обсуждение на lookarounds here

(Обратите внимание, что это не была проверена, но я думаю, что концепция является правильным.)

+0

Это настоящий позор, что .NET 'Regex' не просто имеет блок имен Unicode Unicode, чтобы соответствовать' System.Globalization.UnicodeCategory.Control'. Было бы здорово, если бы я мог просто использовать это, а не вручную указывать все контрольные символы. – Jez

 Смежные вопросы

  • Нет связанных вопросов^_^