2015-06-26 2 views
2

Я хочу избежать некоторых символов в строке и сделать регулярное выражение, чтобы оно не совпало.Избегайте сопоставления экранированных символов в регулярном exprssion

Пример В Scala код:

val regexp = "<".r 
val testedString = "< \\< <" 
val resultList = regexp.findAllMatchIn(testedString).toList.map(m => m.start) 
val wrongList = List(0, 3, 5) 
val correctList = List(0, 5) 

val isWrongList = resultList == wrongList 
val isCorrectList = resultList == correctList 

И это имеет значение:

regexp: scala.util.matching.Regex = < 
testedString: String = < \< < 
resultList: List[Int] = List(0, 3, 5) 
wrongList: List[Int] = List(0, 3, 5) 
correctList: List[Int] = List(0, 5) 

isWrongList: Boolean = true 
isCorrectList: Boolean = false 

Что я хочу сделать, это избежать второй '<' характер и матч только они на positon 0 и 5 Таким образом, isCorrectList должен оценивать значение true, а isWrongList должен оцениваться как false.

Можете ли вы помочь мне написать это регулярное выражение или дать какую-либо подсказку?

ответ

2

Вы можете использовать отрицательное в вашем 'назад регулярное выражение:

val regexp = "(?<!\\\\)<".r 

, чтобы предотвратить соответствие \< случаев.

RegEx Demo

+1

Кажется, что сработало. Большое спасибо :). – user1711160

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