RegEx: \w - “_” + “-” в UTF-8

Мне нужно регулярное выражение, которое соответствует буквам UTF-8 и цифрам, знак тире (-) но не соответствует подчеркиваниям (_), я попробовал эти глупые попытки без успеха:

  • ([\w-^_])+
  • ([\w^_]-?)+
  • (\w[^_]-?)+

\w сокращение от [A-Za-z0-9_], но это также соответствует символам UTF-8, если я имею u модификатор установлен.

Кто-либо может выручить меня с этим?

13
задан Alix Axel 14 January 2010 в 04:46
поделиться

2 ответа

[11235869-

.

Попробуйте:

(?:[\w\-](?<!_))+

Это делает простой матч на все, что кодируется как a \ w (или тире), а затем имеет ширину нуля Смотреть больше, что гарантирует, что персонаж, который был только что сопоставлен, не подчеркивает.

В противном случае вы можете выбрать этот:

(?:[^_\W]|-)+

, который является более настроенным подходом (обратите внимание на прописные буквы W)

Хорошо, мне было очень весело с Unicode в аромате PHP PCR: D Peekaboo говорит, что есть простое решение:

[\p{L}\p{N}\-]+

\ p {l} совпадает с тем, что Unicode, который квалифицирует как букву (Примечание: не символ слова, таким образом, не подчеркивает), а \ p {n} совпадает с тем, что выглядит как номер (включая римские цифры и более экзотические вещи).
\ - это просто сбежанная тире. Хотя не нужно строго необходимо, я склонен делать точку, чтобы избежать тире в классах характера ... Обратите внимание, что в Unicode есть десятки разных тире, что приведет к тому, что вызывает следующую версию:

[\p{L}\p{N}\p{Pd}]+

Где «PD» представляет собой пунктуацию Dash, в том числе, но не ограничиваясь нашим минус-тирешкой. (Обратите внимание, снова нет подчеркивания здесь).

18
ответ дан 1 December 2019 в 22:39
поделиться

Просматривая исходный код и документацию, _ login () никогда фактически не наборы внутренний флаг loggedin . Это выполняется только в модуле аутентификации. Следует также помнить, что общепринятой практикой является то, что методы, начинающиеся с '_', должны рассматриваться по существу как частные методы (или в терминологии Java, возможно, защищенные) только для использования подклассами. Так что вы не должны использовать _login напрямую.

LoginVarPrefix: По умолчанию CGI:: Session:: Auth ожидает, что имя пользователя и пароль посетителя будут переданы в переменных формы log _ username и регистрация _ password. Во избежание конфликтов префикс регистрация _ может быть изменен этим параметром.

Я верю, что это будет работать

$session->param('log_username', 'admin');
$session->param('log_password', 'admin');

$auth->authenticate(); # no return value to check

print "Content-type: text/html\n\n";

if ($auth->loggedIn) {
    print "<p>logged in; go to <a href='index.pl'>index</a></p>";
} else {
    print "<p>not logged in</p>";
}
-121--4028827-

Примечания:

  • TFS имеет собственные командлеты - в большинстве случаев не требуется tf.exe.
  • Сложность операций рабочей области по времени зависит от количества ожидающих переименований, уже имеющихся в рабочей области. В TFS 2005/2008 он значительно хуже линейного. В итоге, вы действительно должны рассмотреть возможность группирования переименований в несколько чекинов, если у вас есть большое количество предметов, в противном случае каждое «tf rename» (или New-TasePendingChange -Rename при использовании командлетов) начнет занимать минуты.
-121--3107878-

Я не уверен, какой язык вы используете, но в PERL вы можете просто написать: [[: alnum:] -] +, когда набор правильный язык.

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

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