2014-10-20 2 views
1

У меня есть регулярное выражение, следующее за языком perl в одном приложении. Я хочу преобразовать его в POSIX перед запуском в другом приложении. Я не знаю, возможно ли это или нет. так кто-нибудь может подумать об этом?Можно ли преобразовать регулярное выражение perl в регулярное выражение POSIX?

регулярное выражение:

[^@\s]/в Perl

[^@[:space:]]/в POSIX

+0

Неужели '[^ @ [: space:]]' не работает для вас? – anubhava

+0

нет его работы. но проблема в том, что я не могу изменить регулярное выражение. У меня есть два приложения, которые используют одно и то же регулярное выражение. но оба они следуют на разных языках. поэтому я должен изменить весь код в любом из них. Следовательно, я хочу знать, возможно ли их преобразование в регулярное выражение? – user3913114

+0

Хмм, если вы хотите, чтобы какая-то автоматическая конвертация из PCRE в POSIX, то я не думаю, что это возможно, поскольку функции PCRE отличаются. – anubhava

ответ

3

Perl понять классы символов POSIX в двойных скобках. Таким образом, [^@[[:space:]]] эквивалентен [^@\s] (до тех пор, пока [[:space:]] не совпадает с \s, который я не совсем уверен).

Можете ли вы переписать регулярное выражение Perl с помощью классов символов POSIX? Тогда было бы легче перейти от одного к другому.

+0

Спасибо за ваше предложение. [: space:] равно [\ t \ r \ n \ v \ f] и в perl, который intern следует за unicode своим [\ p {Z} \ t \ r \ п \ v \ е]. Я думаю, что оба они одинаковы. И я заменил \ s на [[: space:]], его не работает. ([Для [: space:] работает нормально). но я сомневаюсь, будет ли это работать над этим приложением, которое следует perl – user3913114

+1

Мне было не ясно: что я сказал: '[[: space:]]' работает в Perl. Поэтому вам не нужно '[^ @ \ s]' в Perl, вы можете использовать '[^ @ [[: space:]]]' вместо этого, что намного ближе к версии POSIX и, возможно, может быть преобразовано автоматически , – mirod

+1

ya. Я проверил во многих инструментах regex [: space:] также работает для perl. Спасибо большое. – user3913114