Ben tür aşağıdaki özelliklere sahip dizeleri kırmak için düzenli ifade ile gelip çalışırken takılıp:java regex bölünmüş dize
- tarafından Sınırlandırılmış'ı | (Boru) bireysel değer bir boru içeriyorsa karakter
- , bireysel bir değer ters eğik çizgi ile sona ererse, \ (ters eğik çizgi)
- ile kaçan ters eğik çizgiyle
Yani, örneğin, burada bazı dizeleri olduğunu ayrılmak istiyorum:
One|Two|Three
vermelidir:["One", "Two", "Three"]
One\|Two\|Three
vermelidir:["One|Two|Three"]
One\\|Two\|Three
vermelidir:["One\", "Two|Three"]
Şimdi bir tek regex ile bu kadar bölünmüş nasıl?
GÜNCELLEME: Önceden önerdiğiniz gibi, bu normal ifadenin iyi bir uygulaması değildir. Ayrıca, regex çözümü sadece karakterlerin üzerinde yinelemekten daha yavaş büyüklükteki emirdir.
public static List<String> splitValues(String val) {
final List<String> list = new ArrayList<String>();
boolean esc = false;
final StringBuilder sb = new StringBuilder(1024);
final CharacterIterator it = new StringCharacterIterator(val);
for(char c = it.first(); c != CharacterIterator.DONE; c = it.next()) {
if(esc) {
sb.append(c);
esc = false;
} else if(c == '\\') {
esc = true;
} else if(c == '|') {
list.add(sb.toString());
sb.delete(0, sb.length());
} else {
sb.append(c);
}
}
if(sb.length() > 0) {
list.add(sb.toString());
}
return list;
}
en net yapalım. Ne istiyorsun: bölünmüş | ve dizeden kaldırın, \ | ve \ dizgeden \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ split ve \ kaldır | birinci kısımdan ve ikinci kısımdan. Bunun bir regexp ile nasıl yapılacağını düşünüyorsunuz? Benim için tamamen farklı durumlar gibi görünüyor ... – user219882
Sınırlayıcılarınızı değiştirmek mümkün mü? – Paul
Sanırım siz haklısınız! Bu normal ifade için çok fazla olabilir. –