2 回答

TA貢獻1752條經驗 獲得超4個贊
為什么要在同一組中嘗試匹配它?只需添加另一部分以與 {0, 1} 量詞匹配。
[:|;]{1}\-{0,1}([\(|\)|D|p]){1}
由于您在 Java 中使用它,您可能需要加倍反斜杠以便首先正確轉義 String。
在這種情況下,您可以這樣做:
:\)|[:|;]{1}\-{1}([\(|\)|D|p]){1}
或者由于案例似乎沒有很多可能的匹配項,只需像這樣枚舉它們:
:\)|;-\(|;-\)
我測試了它,它工作得很好:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test {
? ? public static void main(String[] args) {
? ? ? ? String s = ":) :) x-] :ox ;-( ;-) ;~( :~D ;)";
? ? ? ? Pattern patt = Pattern.compile(":\\)|;-\\(|;-\\)");
? ? ? ? Matcher m = patt.matcher(s);
? ? ? ? while (m.find())
? ? ? ? ? ? System.out.print(m.group() + " ");
? ? }
}
打印所有 4 場比賽::) :) ;-( ;-)

TA貢獻1797條經驗 獲得超6個贊
這應該做:
(:-?[\|DdPpXx\[\])(]|;-[\|DdPpXx\[\])(])
[\|DdPpXx\[\])(]
是可用于覆蓋所有可能字符的字符集。
除此之外,我正在使用 OR 管道|
來涵蓋這兩種情況 wrt:
和;
。
添加回答
舉報