RegEx Pattern Mactching - PullRequest
       2

RegEx Pattern Mactching

0 голосов
/ 13 января 2019

Чтобы найти одну шестнадцатеричную цифру, я использую следующий шаблон "0 [XX] [0-9a-FA-F]," и найти его в строке ниже источника "12 0x 0x12 0Xf 0xg" индексируется от 0 до 17.

Вывод 0 и индекс 11.

У меня есть вопрос, когда данные используются слева направо в виде набора из 3 букв, тогда совпадение 11-й позиции не должно происходить, тогда как это определяет 11-ю позицию для шестнадцатеричного номера.

Pattern p6 = Pattern.compile("0[xX][0-9a-fA-F]");
Matcher m6 = p6.matcher("12 0x 0x12 0Xf 0xg");
while(m6.find()) { System.out.print(m6.start( ));   
}

Ответы [ 2 ]

0 голосов
/ 13 января 2019

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

Движок регулярных выражений будет всегда выдвигаться на 1 букву за раз и проверять, соответствует ли он шаблону.

Ваша программа выдает выходные данные 6 и 11, что правильно. Я поместил | в индекс 6 и 11. Индекс 0 находится перед первым символом. Как видите, они в начале матчей.

12 0x |0x12 |0Xf 0xg
0 голосов
/ 13 января 2019

11 - это позиция действительного гекса, например, образец соответствует. Если ваш шаблон содержит x символов, это не значит, что он будет соответствовать только тем, которые начинаются в позиции y, так что y = 0 (mod x).

С другой стороны, они не должны перекрываться, поэтому, например, имея шаблон «aaa», только строка 0 будет соответствовать строке «aaaaa», но для «aaaaaa» это будет 0 и 3.

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