regex_match zdaje się ignorować wyrażenie regularne.

0

Napisałem sobie program:

#include<regex>
#include<string>
#include<iostream>

int main()
{
  try
  {
    std::regex reg("[0-9]+", std::regex_constants::extended);
    std::string str;
    std::cin>>str;
    std::cout<<(std::regex_match(str, reg)?"match  ":"no match  ")<<str<<std::endl;
  }
  catch(const std::regex_error e)
  {
    std::cout<<e.what()<<std::endl;
  }
  return 0;
}
 

Powinien on wczytywać stringa i jeśli jest on liczbą wypisać match, w przeciwnym wypadku no match.
Jednak program wypisuje match tylko wtedy, gdy na wejściu jest dokładnie jeden znak (nie ważne, czy jest to cyfra, litera, czy coś innego). Kiedy poda się więcej niż jeden znak dostaję no match. Google mi nic nie pomógł (albo ja nie umiem szukać).
Mój kompilator: gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
Co zrobić, aby to zadziałało?

1

Spróbuj to zrobić z użyciem Boosta, libstdc++ nie ma jeszcze dla tej biblioteki pełnego wsparcia (http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011).

0

Mój kompilator: gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)

Masz coś z kompilatorem.

c:\pp\myprogs\4p>cl regex.cpp /EHsc
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.319 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

regex.cpp
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:regex.exe
regex.obj

c:\pp\myprogs\4p>regex
123
match  123

c:\pp\myprogs\4p>

libstdc++ nie ma jeszcze dla tej biblioteki pełnego wsparcia
To po co w ogóle dają nagłówek, skoro nie działa?

1 użytkowników online, w tym zalogowanych: 0, gości: 1