2011-08-13 6 views
2

У меня есть проблема со следующим кодом. Я хочу извлечь строки, содержащие атрибут слова. Я использовал http://www.regextester.com/, где это, кажется, работает очень хорошо, но в моей программе строка остается нетронутой. Я не понимаю почему. Может быть, он не использует символы новой строки правильно, поэтому^и $ получают всю строку?Извлечение строк, содержащих слово из строки Java, с использованием regex

Вот код:

String attributes = VS.replaceAll("^(?!attribute).*$", ""); 

А вот строка:

String vShaderStr = 
     "attribute vec4 a_position;            \n" 
     +"attribute vec3 a_normal;            \n" 
     +"attribute vec2 a_texCoord;           \n" 
     +"uniform mat4 modelViewMatrix;           \n" 
     +"uniform mat4 projectionMatrix;          \n" 
     +"void main()               \n" 
     +"{                  \n" 
     +"  gl_Position = projectionMatrix * modelViewMatrix * a_position; \n" 
     +"}                  \n"; 

Спасибо большое!

ответ

3

Да, ^ и $ матча только начало и конец строки , а не из \n -завершённых линий в пределах String. Вам необходимо скомпилировать ваше регулярное выражение с флагом MULTILINE, чтобы изменить это. Таким образом, решение состоит в том, чтобы запустить вашу спецификацию регулярного выражения с помощью (?m).

+0

Kilian правильно, не могу вставить мой модульный тест здесь, но просто измените строку регулярного выражения на атрибуты String = VS.replaceAll ("(? M)^(! Attribute). * $", "") ; как сказал Килиан – eon

+0

Спасибо большое! он работает сейчас – user826846

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