剥去前后垂直条|来自Java中的字符串

时间:2015-11-17 20:25:18

标签: java regex

我有这样的大块文字:

|!?:some_text!?:|

|!?some_text!?|

|?:some_text?:!|

...

在所有情况下,我想剥离| ? !:(它们不能一起发生,但它们处于领先和尾随位置)得到some_text

当我使用以下表达式在|类中编译时,我在使用Java中的regex引擎处理Pattern时遇到问题:

^[?:!\|]+
[?:!\|]+$

2 个答案:

答案 0 :(得分:1)

也许,您将|混淆为一个交替运算符(在字符类之外未转义|)和一个字符类内的文字未转义管道|

请参阅此IDEONE demo

String p = "^[?:!|]+|[?:!|]+$";
System.out.println("|!?:some_text!?:|".replaceAll(p, ""));
System.out.println("|!?some_text!?|".replaceAll(p, ""));
System.out.println("|?:some_text?:!|".replaceAll(p, ""));

正则表达式^[?:!|]+|[?:!|]+$中有3个管道:在一个字符类中(在[...]之间)它是一个文字管道符号,在它之外,它是一个交替运算符。

答案 1 :(得分:1)

使用这一行

String str = "|!?:some_text!?:|";
str = str.replaceAll("[:!|?]", "");

我希望它符合标准:)