Giriş
Açıklaması şöyle
regex_iterator ile ilişkisi
Sınıf altta regex_iterator kullanır. Açıklaması şöyle
Şöyle yaparız.
Açıklaması şöyle
Şöyle yaparız. -1 eşleşmeyen grubu belirtir. 0 ise ile ilk yakalanan grubu (capture group) belirtir.
utf-8 ile şöyle yaparız. Bu sefer regex'e sadece ayraçları veririz. -1 ile eşleşmeyen grupları alırız. Yani bir nevi split olarak kullanırız.
* operator
str() metodu ile aynıdır.
str metodu
Şöyle yaparız.
Açıklaması şöyle
Bu sınıf ile bir string içindeki tüm eşleşmeleri yakalamak mümkün. Normalde regex eşleşme bitince durur. Ancak string içinde halen başka eşleşmeler varsa iterator ile tüm eşleşmeleri dolaşmak mümkün.std::regex_token_iterator is a read-only ForwardIterator that accesses the individual sub-matches of every match of a regular expression within the underlying character sequence. It can also be used to access the parts of the sequence that were not matched by the given regular expression (e.g. as a tokenizer).
regex_iterator ile ilişkisi
Sınıf altta regex_iterator kullanır. Açıklaması şöyle
Constructor - iterator + iterator + regexA typical implementation of std::regex_token_iterator holds the underlying std::regex_iterator, a container (e.g. std::vector) of the requested submatch indexes, the internal counter equal to the index of the submatch, a pointer to std::sub_match, pointing at the current submatch of the current match, and a std::match_results object containing the last non-matched character sequence (used in tokenizer mode).
Şöyle yaparız.
const string str ="...";
regex re ("..");
sregex_token_iterator rit (str.begin(), str.end(), re);
Bitiş iterator için şöyle yaparız.sregex_token_iterator rend;
Tüm eşleşmeleri bir vector'e doldurmak için şöyle yaparız.std::vector<std::string> result;
std::string str = "...";
std::regex re ("[A-Za-z0-9]+");
std::copy(
std::sregex_token_iterator(str.begin(), str.end(), re),
std::sregex_token_iterator(),
std::back_inserter(result));
Constructor - iterator + iterator + regex + Capture Group NumarasıAçıklaması şöyle
ÖrnekA regex iterator helps to iterate over matched subsequences. However, sometimes you also want to process all the contents between matched expressions. [...] In addition, you can specify a list of integral values, which represent elements of a “tokenization”:
- -1 means that you are interested in all the subsequences between matched regular expressions (token separators).
- 0 means that you are interested in all the matched regular expressions (token separators).
- Any other value n means that you are interested in the matched nth subexpression inside the regular expressions.
Şöyle yaparız. -1 eşleşmeyen grubu belirtir. 0 ise ile ilk yakalanan grubu (capture group) belirtir.
string data = "...";
regex re("...");
sregex_token_iterator rit(data.begin(), data.end(), re, { -1, 0 });
İlk * operatörüne erişince unmatched string'i alırız.*i++; //unmatched content (-1)
İkinci erişmemizde ilk yakalanan grubu alırız.*i++; //matched content (0)
Örnekutf-8 ile şöyle yaparız. Bu sefer regex'e sadece ayraçları veririz. -1 ile eşleşmeyen grupları alırız. Yani bir nevi split olarak kullanırız.
std::regex regex(",|。|!|?");
std::string src = "使用boost split失败了,不知道什么原因。有人可以告诉我吗?谢谢!";
std::sregex_token_iterator iterator(src.begin(), src.end(), regex, -1);
std::sregex_token_iterator end;
for ( ; iterator != end; ++iterator) {
std::string res = *iterator;
std::cout << res << std::endl;
}
Çıktı olarak şunu alırız.results:
使用boost split失败了
不知道什么原因
有人可以告诉我吗
谢谢
str() metodu ile aynıdır.
str metodu
Şöyle yaparız.
while(rit != rend)
{
rit->str();
++rit;
}
Hiç yorum yok:
Yorum Gönder