Regexp для двойной
У меня есть это regexp "^[0-9]+\.?[0-9]*$")
, чтобы соответствовать двойному номеру или целому числу в visual С++, но, похоже, он не работает. есть идеи. вот как я применяю код:
if ( System::Text::RegularExpressions::Regex::IsMatch(e0, "^[0-9]+\.?[0-9]*$"))
{
e0_val = System::Convert::ToDouble(e0);
}
Ответы
Ответ 1
Нет ничего плохого в регулярном выражении, если вы скажете, что это ваше противостояние. Вам нужно удвоить escape-символ \
, поскольку это также символ escape-строки строки С++.
Кроме того, существует край, где это регулярное выражение будет считать, что 1.
является допустимым числом с плавающим указателем. Таким образом, вам может быть лучше с /^[0-9]+(\\.[0-9]+)?$
, что устраняет эту возможность.
Ответ 2
regexp выше не является совершенным, так как он принимает "09", что не является допустимым числом. лучшее выражение:
"^(-?)(0|([1-9][0-9]*))(\\.[0-9]+)?$"
где:
1. is an optional negative sign;
2. is zero or a valid non-zero integer;
4. is the optional fracture part;
в теории, часть трещины должна быть записана как "(\. [0-9] * [1-9])?"
вместо этого, потому что число не должно иметь нулевые нули. на практике исходная строка могла быть создана с фиксированным числом цифр, например:
printf("%.1f", x);
чтобы он мог легко заканчиваться нулевым символом. и, конечно же, это все фиксированные точки, а не сами двойники. двойной номер может
записывается как -1.23e-4, а вместо -0.000123.
Ответ 3
Возможно, не прямой ответ, просто полезная информация. Регулярное выражение:
std::regex rx(R"(^([+-]?(?:[[:d:]]+\.?|[[:d:]]*\.[[:d:]]+))(?:[Ee][+-]?[[:d:]]+)?$)");
соответствует строкам:
"1", "0", "10",
"1000.1", "+1",
"+10", "-10", "1.",
".1", "1.1", "+1.",
"-1.", "+.1", "-.1",
"009", "+009", "-009",
"-01e0", "+01E0", "+1e-1",
"+1e+1", "+1.e1", "1E1",
"1E+1", "0.001e-12", "0.111111111111111"
и не соответствует следующим строкам:
".", "1a", "++1",
"+-1", "+", "-.",
"-", "--1.", "1.e.1",
"1e.1", "0+.e0"
Первые из них выглядят как допустимые значения для типа double
в C++, например, double test = +009.e+10
в порядке.
Играйте в ideone.com: https://ideone.com/ooF8sG
Ответ 4
/^[0-9]+.[0-9]+$: используйте это для двойников.
принимает 123.123 типа.