Giriş
Şu satırı dahil ederiz.
Girdi olan string, örüntüye göre dönüştürülüp yeni bir string döner. C#'taki Regex.Replace metoduna benzer.
Açıklaması şöyle
String yerine iterator ile çalışır. Şöyle yaparız.
Şöyle yaparız.
Dönüşüm için back reference (capture group) değerleri kullanılabilir. Capture Group $n veya $nn şeklinde belirtilir.
$nn şeklinde 01 sayısının kullanımı var.
$1 şeklinde kullanım var. Şöyle yaparız.
boost::regex_replace \\1 şeklinde çapture group erişimine izin veriyor. Bu kullanım sanırım Perl tarzı. C++11 ile uyumlumu bilmiyorum.
Şu satırı dahil ederiz.
#include <regex>
C++11 ile gelen bu sınıflar çok faydalı. Eskiden GNU ile gelen C tarzı metodları kullanır ve şu satırı dahil ederdik.#include <regex.h>
string result = Regex.Replace(input, pattern, replacement)
match_flagAçıklaması şöyle
format_default Use ECMAScript rules to construct strings in
std::regex_replace
format_sed Use POSIX sed utility rules in std::regex_replace.
regex_replace - output iterator + input iterator begin + input iterator end + regex + format stringString yerine iterator ile çalışır. Şöyle yaparız.
std::ofstream fs ("filename");
std::string text = ...;
std::regex_replace(std::ostreambuf_iterator<char>(fs),
text.begin(), text.end(), std::regex("(\\n+)"), "\n");
regex_replace - input string + regex + format stringŞöyle yaparız.
std::regex r("\\s+", std::regex::optimize);
std::string test = ...;
std::string out = std::regex_replace(test, r, " ");
regex_replace - input string + regex + format string içinde back referenceDönüşüm için back reference (capture group) değerleri kullanılabilir. Capture Group $n veya $nn şeklinde belirtilir.
Örnek$n
The nth capture, where n is a single digit in the range 1 to 9 and $n is not followed by a decimal digit. If n ≤ m and the nth capture is undefined, use the empty String instead. If n > m, the result is implementation-defined.
$nn
The nnth capture, where nn is a two-digit decimal number in the range 01 to 99. If nn ≤ m and the nnth capture is undefined, use the empty String instead. If nn > m, the result is implementation-defined.
$nn şeklinde 01 sayısının kullanımı var.
regex regex_a( "(.*)bar(.*)" );
cout << regex_replace( "foobar0x1", regex_a, "$010xNUM" ) << endl;
Çıktı olarak şunu alırızfoo0xNUM
Örnek$1 şeklinde kullanım var. Şöyle yaparız.
std::string text = "...";
std::regex re("...");
std::string out = std::regex_replace(text, re, "<$1>");
Diğerboost::regex_replace \\1 şeklinde çapture group erişimine izin veriyor. Bu kullanım sanırım Perl tarzı. C++11 ile uyumlumu bilmiyorum.
string s = boost::regex_replace(
string("Example_45-3"),
boost::regex("[^0-9]*([0-9]+).*"),
string("\\1")
);
Hiç yorum yok:
Yorum Gönder