匹配任何字符串正则表达式

时间:2014-01-26 09:15:06

标签: java regex

我试图在Java中使用正则表达式来匹配任何字符串字符串,但是却遇到了问题。我正在尝试使用hashmap中的相应值替换字符串包含%key%的位置。

我的醋栗正则表达式模式是%([.]+)%,似乎不起作用,但我不确定为什么。我试过%([a-z A-Z 0-9])%似乎工作正常,但我想允许所有的charichters但新的行和“。”除了fullstops之外似乎不允许任何其他内容(例如%...%会有问题,但%test%不会。

老实说,我不确定我做错了什么,我认为我在错误的地方使用了fullstop,但似乎无法找到如何正确使用它。

对于可怕的解释感到抱歉,我想不出如何把它变得更好。

感谢。

4 个答案:

答案 0 :(得分:4)

  

I would like to allow all charichters but new line and "."

您可以使用此基于否定的正则表达式:

%([^.%\\n\\r]*)%

[^.%\\n\\r]表示匹配除DOT OR %或新行字符

之外的任何内容

答案 1 :(得分:1)

使用(?<=%)(.+?)(?=%)

<强>说明

EXPLANATION

示例代码:

HashMap<String , String> map=new HashMap<>();
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
String line="%123%";

Pattern pattern=Pattern.compile("(?<=%)(.+?)(?=%)");
Matcher matcher=pattern.matcher(line);
if(matcher.find()){
      String match=matcher.group();
      Iterator<String> it=map.keySet().iterator();
       while(it.hasNext()){
           String key=it.next();
           if(match.contains(key)){
                line=line.replace(key, map.get(key).toString());
           }

        }
            System.out.println(line);
 }

<强>输出

%onetwothree%

答案 2 :(得分:0)

尝试:

System.out.println("%sdfsdf%".matches("^%.+%$"));

我认为在某些情况下Regex是不够的 - 你也应该做一些逻辑。 您可以尝试使用StringBuilder

答案 3 :(得分:0)

你想使用类似的东西:

%([^.]+?)%

?表示非贪婪。 [^.]表示没有完全停止。

鉴于输入:

%inside1%something%inside2%

它会匹配   %inside1%%inside2%

[.]的问题在于它实际上是句号。

修改 如果你逐行匹配,那么我的就好了。如果您要跨多行匹配,那么您应该使用anubhava回答明确排除匹配中的换行符,这样就可以从结果中排除匹配行数%的多行查询。