Почему Mono связывается с регулярным выражением - PullRequest
0 голосов
/ 20 июля 2010

Эта строка моно в Linux заблокирована (я использую 2.6.4 VM distro на официальном сайте)

var match = Regex.Match(sz, linkPattern);

Строка, которая получает ссылку и название.

var linkPattern = @"<\ba\b[^\>]*\bhref\b*=\b*""([^""\>]*)""[^\>]*\btitle\b*=\b*""([^""\>]*) by [^""\>]*""";

Когда моно попадает в эту строку, оно не падает, выдает исключение или что-то еще.Используя топы, я вижу моно, используя 96% процессора.Я не знаю, как долго эта строка.Я подозреваю, что он <8 КБ (я проверял другой URL), и прошло несколько минут с тех пор, как я запустил код, поэтому что-то должно быть сломано. </p>

Ответы [ 2 ]

2 голосов
/ 20 июля 2010

"Слишком много \b х" было моей первой реакцией. Но на самом деле:

\b означает границу слова. На мой взгляд, <\ba и <a должны быть идентичными. Кроме того, \b*, следовательно, будет означать «необязательное повторение границ слов», что звучит довольно запутанно.

Полагаю, я вообще никогда не использовал \b, а использовал \s? или \s*.

Вы пытались использовать другой механизм регулярных выражений (Perl, PHP), чтобы определить, вызвана ли блокировка из-за Mono?

1 голос
/ 20 июля 2010

В реализации Mono regex есть некоторые ошибки, которые могут привести к бесконечному повторению. Вероятно, единственное исправление состоит в том, чтобы переписать ваш шаблон как более простое регулярное выражение или не использовать регулярные выражения для этой задачи.

Вы также можете отправить сообщение об ошибке. Я думаю, что один из студентов Google Summer of Code в настоящее время работает над механизмом регулярных выражений Mono.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...