Подберите любое слово, кроме двух в конкретном - PullRequest
0 голосов
/ 06 апреля 2011

Я пытаюсь создать регулярное выражение, соответствующее любому слову (\w+), кроме true или false.

Это то, что я получил до сих пор: \w+\s*=\s*[^true|^false]\w+

class Ntnf { 
 public static void main ( String ... args ) { 
  System.out.println( args[0].matches("\\w+\\s*=\\s*[^true|^false]\\w+") );
 }
}

Но не работает для:

a = b
a = true
a = false

Соответствует всегда.

Как мне сопоставить любое слово (\w+), кроме true или false?

EDIT

Я пытаюсь определить этот паттерн:

a = b
x = y
name = someothername
etc = xyz
x = truea
n = falsea

Но избегайте совпадений

a = true
etc = false
name = true

Ответы [ 3 ]

1 голос
/ 06 апреля 2011

Вы можете использовать:

^(?!(true|false)$)
  • ^ - начало строки
  • ?! - негативный взгляд
  • $ - конец строки

Таким образом, оно совпадает до тех пор, пока вся строка не просто "true" или "false". Обратите внимание, что он все еще может начинаться с одного из них.

Однако может быть проще использовать обычные сравнения строк.

РЕДАКТИРОВАТЬ:

Целое регулярное выражение (без побега) для вашей ситуации:

^\w+\s*=\s*(?!(true|false)$)\w+$

Это та же идея, за исключением того, что мы помещаем ее в форму уравнения.

1 голос
/ 06 апреля 2011

[^true] Класс символов .Он соответствует только одному символу .[^true] означает: «Соответствовать этому символу, только если он не один из t, r, u или e».Это не то, что вам нужно, верно?

Regex не очень хорошая идея для этой задачи.Это будет довольно сложно сделать в регулярном выражении.Просто используйте сравнение строк.

0 голосов
/ 06 апреля 2011

Квадратные скобки соответствуют списку возможных символов или отклоняют список возможных символов (не обязательно в указанном вами порядке), поэтому [^ true] - не лучший способ.пытаюсь не соответствовать определенному слову, я обычно делаю следующее: ([^t]|t[^r]|tr[^u]|tru[^e])

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