Belirli satırları kaldırmak istiyorum ('aaa' ve 'bbb'), çok satırlı bir dizeden standart C++ regex kitaplığına sahip olmak istiyorum. ECMAScript ile sözdizimini değiştirin, sonraki deseni kullanıyorum: /^(aaa|bbb)$/gm
. , std::regex_replace
için regex argümanı gibi bir şey geçirmeyi denedim, ancak ^
ve $
gibi match_not_eol
veya match_not_bol
eşleşme bayraklarını geçemediğim halde satırın sonu ve eşleşmiyor gibi görünmüyor. Peki bu durumda C++ deseni nasıl görünmeli?C++ regex: bir çizgiyi birden çok satırda değiştirin
cevap
regex_replace
başvuru ^
ve $
anlamlarını yeniden tanımlayan herhangi bir bayrağı listelemez. Bu nedenle, satırlarını satırında aramanız ve değiştirmeniz gerektiğinde, önce (^|\r?\n)
yakalama grubunu ve ana desenden sonra bir (?=\r?\n|$)
gözatını kullanın (ve geri tepme $1
ile değiştirin). Kuşkusuz, kalıplar, değişimden sonra boş hatlara izin vermek ya da olmamak için ayarlanabilir.
görün IDEONE demo:
std::string s("ccc\r\naaa\r\ngggg");
std::regex ee(R"((^|\r?\n)(?:aaa|bbb)(?=\r?\n|$))");
std::string newtext = std::regex_replace(s, ee, "$1");
std::cout << newtext << std::endl;
Çıktı:
ccc
gggg
Yanıtladığınız için teşekkür ederiz. Aslında "(^ | \ n)" harfini başlangıçta ve "($ | \ n)" eşlemenin sonunda eşlemek gibi bir şey denedim, ama öyle görünüyor ki, önceki satırın olması durumunda satır eşleşmiyor büyük olasılıkla, "(^ | \ n)" başlangıcı önceki eşleşmenin parçası olduğu için değiştirilmiştir. Örneği R "((^ | r? \ N) (?: ccc | aaa | bbb) (\ r? \ N | $)) ile değiştirirseniz, örneğinizde ne hakkında konuştuğumu görebilirsiniz. . – tonso
Bu durumda, takip yakalama grubunu bir bakış noktasına dönüştürün. Std :: regex ee (R "((^ | \ r? \ N) (?: aaa | bbb) (? = \ R? \ N | $))"); 'kullanın ve bir geri referansla değiştirin $ 1 $ '. –
Eğer '(? = \ R? \ N | $)' kullanırsam, segfault ile sonuçlanır, çünkü '$' lookahead'de yer alır, sanırım, ama ben kullanırsam ((? = \ R? \ N)) | $) 'Tamam. Yardım için teşekkürler – tonso
- 1. Sütundaki tüm karakterleri birden çok satırda değiştirin
- 2. Bir satırda birden çok özellik bildirme
- 3. FreeMarker? Birden çok değeri değiştirin
- 4. Bir satırda birden çok değişkeni ruby
- 5. jquery Bir satırda birden çok öğeye başvuruyor
- 6. Birden çok girdi dosyasını değiştirin
- 7. Tablo satırını birden çok satırda göster
- 8. C# Regex - Birden çok eşli parantezin dizgiden nasıl kaldırılacağı
- 9. C++ birden çok değer
- 10. Düzenli ifade, birden fazla eğik çizgiyi yalnızca bir tane ile değiştirin
- 11. Bir satırda birden fazla giriş
- 12. IntelliJ birden çok satırda değişken adlarını değiştir
- 13. Birden çok olayı eşleşecek şekilde değiştirin. OptionSetType
- 14. Dize içinde birden çok sözcüğü değiştirin
- 15. Tek bir satırda birden çok komut nasıl çalıştırılır
- 16. Bir satırda birden fazla yerliler?
- 17. Birden çok satıra bölünmüş Ruby regex
- 18. javascript regex html karakterlerini değiştirin
- 19. C# aşağıdaki RegEx çok yavaş büyük dize
- 20. python'da win32com.client'i kullanarak birden çok metni bulup değiştirin
- 21. Visual Studio'da birden çok satırda argüman listesi otomatik girinti
- 22. SQL sorgusu Bazı sınırlayıcılara göre satırda birden çok satıra bölünmesi
- 23. Tek satırda birden çok değişken bildirme + Angular 2 & TypeScript
- 24. SQL Satırda Filtrelenmiş Birden Çok Tabloya Katılma Koşulları
- 25. SQL: Birden çok satırda sürekli tarih aralıkları buluyor musunuz?
- 26. Regex, küçük harflerle büyük harflerle değiştirin. PhpStorm
- 27. Alt çizgiyi boşluk ve büyük harfle değiştirin. İlk karakter dizisi
- 28. Javascript'teki tüm birden çok alanı kaldırın ve tek boşlukla değiştirin
- 29. Sayfa başına birden çok slayt olması için pdf dosyasını değiştirin
- 30. PHPExpencerede mevcut .xlsx dosyasını birden çok çalışma sayfası ile değiştirin
çevrimiçi bir derleyici kopyalanıp yapıştırılması edilebilir bir şey gönderebilir miyim? – Mikhail
Eğer reddederseniz, açıklamaya dikkat edin, neden "Sizce bu soru hiçbir araştırma çabası göstermemektedir; belirsiz veya faydalı değildir". Teşekkürler – tonso
Düşürmedim ... – Mikhail