2015-06-09 12 views
6

tôi đã sử dụngRegular Expression để loại bỏ tất cả mọi thứ nhưng ký tự và số giữa Quảng trường ngoặc

value.replaceAll("[^\\w](?=[^\\[]*\\])", ""); 

nó hoạt động tốt nếu trong trường hợp sau đây

[a+b+c1 &$&$/]+(1+b&+c&) 

sản xuất:

[abc1]+(1+b&+c&) 

nhưng trong trường hợp chuỗi sau nó chỉ loại bỏ các dấu ngoặc vuông trong dấu ngoặc vuông trong lần chạy đầu tiên

[a+b+c1 &$&$/[]]+(1+b&+c&) 

sản xuất:

[a+b+c1 &$&$/]+(1+b&+c&) 
+1

tại sao '+ 'trong' a + b + c1' không bị xóa? .. Theo câu hỏi của bạn, nó không nên ở đó đúng không ?. Điều gì xảy ra nếu biểu thức là 'a + b + c1 ++++ -' .. thì đầu ra là gì? – TheLostMind

+0

xin lỗi tôi đã làm sai bằng văn bản –

+7

Dấu ngoặc nhọn không thể được giải quyết chỉ bằng regex. Viết một trình phân tích cú pháp cho việc này. – anubhava

Trả lời

2

Dịch bình luận của tôi vào một câu trả lời

Bạn có thể sử dụng phân tích cú pháp này đơn giản trong Java để thay thế của bạn:

String s = "[a+b+c1 &$&$/[]]+(1+b&+c&)"; 
int d=0; 
StringBuilder sb = new StringBuilder(); 
for (char ch: s.toCharArray()) { 
    if (ch == ']') 
     d--; 
    if (d==0 || Character.isAlphabetic(ch) || Character.isDigit(ch)) 
     sb.append(ch); 
    if (ch == '[') 
     d++; 
} 
System.out.println(sb); 
//=> [abc1]+(1+b&+c&) 
+1

cảm ơn rất nhiều nó đang hoạt động hoàn hảo! –

+0

vấn đề duy nhất với nó là bạn không thể đặt khung lồng nhau khép kín –

+0

Đúng vậy, dấu ngoặc đơn phải được cân bằng cho phương pháp đơn giản này. – anubhava

Các vấn đề liên quan