Регулярное выражение не будет соответствовать - PullRequest
0 голосов
/ 31 августа 2018

я пытаюсь следующий код

d := []byte("\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80J\x13\x80SQ\x80L\xe0\x80@\x92\x80L?\x80H\xe0")

r := regexp.MustCompile(`(\\x[0-9][0-9].*)+`)

fmt.Println(r.Match(d))

но это дает мне ложь, хотя на онлайн-тестере регулярных выражений он работает нормально и соответствует всей строке

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Посмотрите на различные типы строковых литералов в документации Go .

Возможно, вы захотите использовать обратные тики (`) для" raw_string_lit "в вашей первой строке.

0 голосов
/ 31 августа 2018

Когда вы используете \ в строке, это сигнализирует о последовательности escape-символов. Сама строка не отображается как \x01..., но вместо этого каждый из этих кусков преобразуется в одиночный символ .

То есть, ваше регулярное выражение пытается сопоставить значение необработанной строки, а не фактическое значение строки, сохраненное в d.

Я не уверен, как улучшить ваше регулярное выражение, так как мне не ясно, что вы ожидаете, что оно будет соответствовать. В настоящее время кажется, что вы пытаетесь проверить, что байтовый массив был создан с использованием определенного метода, а не путем установки байтов в целые числа. Если вы сможете лучше сформулировать цель своего регулярного выражения, я смогу оказать вам дальнейшую помощь.

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