Проблема регулярных выражений в Java - PullRequest
0 голосов
/ 09 июня 2009

У меня есть группа строк, подобная следующей:

tb-set-node-recipe $vpn1   W2K3_SP2_VPN_SRV
tb-set-node-os     $vpn2   I_W2K3_SP2_VPN_SRV
tb-set-node-os     $xpcli1 I_XP_SP3_VPN_CLI
tb-set-node-os     $xpcli2 I_XP_SP2_VPN_CLI
tb-set-node-os     $xpcli3 I_XP_SP1_VPN_CLI
tb-set-node-recipe $ftp1   FC8_KS_FTP_SRV
tb-set-node-os     $smb1   XP_SP3-STD
tb-set-node-recipe $web1   FC8_KS_WEB_SRV

Я использую следующее регулярное выражение в языке Java для разбора операторов tb-set-node-os:

(tb\-set\-node\-os)\s+[\$\w]+\s+\w+

Работает отлично, за исключением второй и последней строки, содержащей $smb1

Кто-нибудь знает, почему это может быть? Я не могу понять это. Заранее спасибо!

Ответы [ 3 ]

8 голосов
/ 09 июня 2009

\w не соответствует дефису (-), поэтому вам необходимо адаптировать его к этому:

(tb\-set\-node\-os)\s+[\$\w]+\s+[\w-]+

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


Также ничего не стоит, вы можете потенциально улучшить производительность с помощью собственнических квантификаторов, когда у вас есть последовательные взаимоисключающие предметы:

(tb\-set\-node\-os)\s++[\$\w]++\s++\w++

Поскольку \s никогда не может совпадать с \w (и наоборот), вместо обычных жадных можно использовать собственнические квантификаторы (*+ и ++), которые позволят избежать / предотвратить потенциальный возврат.

6 голосов
/ 09 июня 2009

Вероятно, это потому, что тире - это не символ слова (не соответствует \ w), поэтому что-то вроде этого может работать:

(tb\-set\-node\-os)\s+[\$\w]+\s+[\w\-]+
1 голос
/ 09 июня 2009

Единственная проблема, которую я вижу, состоит в том, что в строке $ smb1 в последнем столбце есть дефис, который, кажется, не соответствует \ w. Вы можете попробовать. + В конце вашего выражения.

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