düzenli ifadeli eşdeğer, ben bunu yapabilirsiniz:std :: Perl '/ g' küresel değiştirici
$text = '1747239';
@matches = ($text =~ m/(\d)/g);
# @matches now contains ('1', '7', '4', '7', '2', '3', '9')
C++ Normal ifade eşlemeyi kullanarak, böylece bir maç olsun bu davranışı çoğaltmak için en iyi yolu nedir tüm maçları içeren set?
Şu an bu var: -
compiledRegex = std::regex(regex, std::tr1::regex_constants::extended);
regex_search(text, results, compiledRegex);
int count = results.size();
// Alloc pointer array based on count * sizeof(mystruct).
for (std::cmatch::iterator match = results.begin();
match != results.end();
++match)
{
// Do something with match;
}
Ancak bu sadece ince olduğu/g olmadan sadece Perl gibi, bana ilk maçı verecektir, ama ben/g etkisini istiyorum.
Bunu yapmak için iyi bir yol var mı, yoksa normal ifadeyi tekrar tekrar çalıştırmalı mıyım?
yardımcı Umut neden ilk giriş budur, her zaman tüm maç olduğunu, ben bir bayrak yapmak regex_search yapmak için umuyordum sanırım o. Muhtemelen, metin işaretçisini her yinelemede son eşleşmenin sonuna taşımak zorunda mısın? –
@JonB Haklısınız. Dize yerine yineleyiciler kullanılmalıdır. Her yinelemenin sonunda, arama yineleyicisi, 'results [0] .second' kullanılarak güncellenmelidir. Cevabımı çirkin bir şekilde güncelledim. – Eugene