Почему это регулярное выражение соответствует строке, содержащей более 10 нужных символов? ⇐ C++
-
Гость
Почему это регулярное выражение соответствует строке, содержащей более 10 нужных символов?
У меня есть следующее регулярное выражение, и я использую https://www.regextester.com/ для его проверки.
^(?=^.{10})[a-zA-Z]+:[0-9]+\s* Требование состоит в том, чтобы входные данные могли состоять из буквенных символов и цифр, разделенных двоеточием с некоторым количеством пробелов в конце. Ввод должен начинаться с буквенных символов, но может содержать лишние символы после завершающего пробела или последнего числа, которое я не хочу сопоставлять после 10-го. Соответствующая строка должна содержать ровно 10 символов. В следующих примерах строк я подчеркнул то, что, по моему мнению, будет соответствовать. Я не привязываюсь к $ в конце, поскольку знаю, что рассматриваемая входная строка, вероятно, будет содержать более 10 символов, поэтому я не пытаюсь проверить совпадение всей строки.
A:12345678 // соответствует, это нормально
A:123456789 // Должно соответствовать только цифре 8
FOO:567890s123 // должно соответствовать только 0
Фактический результат заключается в том, что он соответствует всему, что находится после 10-го символа, если это буквенно-цифровой символ или пробел. Я ожидаю, что он будет соответствовать 10-му символу и не более того. Как исправить это выражение?
Обновление: в конечном итоге я попытаюсь включить это регулярное выражение в программу на C++, используя соответствующее регулярное выражение boost.
У меня есть следующее регулярное выражение, и я использую https://www.regextester.com/ для его проверки.
^(?=^.{10})[a-zA-Z]+:[0-9]+\s* Требование состоит в том, чтобы входные данные могли состоять из буквенных символов и цифр, разделенных двоеточием с некоторым количеством пробелов в конце. Ввод должен начинаться с буквенных символов, но может содержать лишние символы после завершающего пробела или последнего числа, которое я не хочу сопоставлять после 10-го. Соответствующая строка должна содержать ровно 10 символов. В следующих примерах строк я подчеркнул то, что, по моему мнению, будет соответствовать. Я не привязываюсь к $ в конце, поскольку знаю, что рассматриваемая входная строка, вероятно, будет содержать более 10 символов, поэтому я не пытаюсь проверить совпадение всей строки.
A:12345678 // соответствует, это нормально
A:123456789 // Должно соответствовать только цифре 8
FOO:567890s123 // должно соответствовать только 0
Фактический результат заключается в том, что он соответствует всему, что находится после 10-го символа, если это буквенно-цифровой символ или пробел. Я ожидаю, что он будет соответствовать 10-му символу и не более того. Как исправить это выражение?
Обновление: в конечном итоге я попытаюсь включить это регулярное выражение в программу на C++, используя соответствующее регулярное выражение boost.
Мобильная версия