2010-02-22 2 views
1

У меня есть несколько строк в текстовом файле, как это:Почему мое регулярное выражение не подходит?

==Text== 

Я пытаюсь совпадать с началом, с помощью этого:

line.matches("^==[^=]") 

Однако это возвращает ложь для каждой строки ... немного помочь?

+0

На каком языке это? Если это Java, довольно уверен, что он пытается сопоставить всю строку. Это не сработает, потому что [^ =] в конечном итоге не будет соответствовать, делая всю строку не соответствующей, возвращая false – Tarka

ответ

4

matches автоматически привязывает регулярное выражение, поэтому регулярное выражение должно соответствовать всей строке. Попробуйте:

line.matches("==[^=].*") 
7

Как я помню, метод matches() ищет только точное совпадение.

+0

Точное и полное совпадение. –

+0

Это правда, и документация может быть намного понятнее об этом - http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html – mob

0

Попробуйте с line.matches("^==(.+?)==\\s*$")

0

.matches только возвращает истину, если вся строка соответствует. В вашем случае строка должна начинаться с '==' и содержать ровно один символ, который не был бы равен. Если вы хотите, чтобы соответствовать этой строке для всей линии:

line.matches ("== [^ =] * ==")

+0

Это должно привести к совпадению ==, за которым следуют произвольные неравные символы, за которыми следует другая ==. – TheJacobTaylor

+0

Bummer, незначительные изменения переместили мой ответ, чтобы выглядеть более новым, чем он есть. – TheJacobTaylor

0

Если я правильно помню, matches будет только возврат true, если вся строка соответствует регулярному выражению. В вашем случае это не так. Чтобы использовать matches, вам необходимо расширить регулярное выражение (с помощью подстановочных знаков), чтобы оно соответствовало концу строки. В качестве альтернативы вы можете использовать метод Matcher.find() для соответствия подстрокам строки

1

Вы также можете использовать String.startsWith("==");, если это что-то простое.

Смежные вопросы