【问题标题】:Processing my own escape characters using Regular expression使用正则表达式处理我自己的转义字符
【发布时间】:2011-11-27 11:35:57
【问题描述】:

首先我要为我糟糕的英语道歉,请让我解释一下我的情况, 假设我有 2 个文本框供用户输入。在服务器端,我想结合 两个字符串作为单个字符串,由 ',' 字符分隔。例如,如果用户 将第一个文本框输入为“hello world”,将第二个文本框输入为“foo bar”, 最后的字符串应该是“hello world,foo bar”。此字符串需要拆分 稍后用于其他操作以利用其内容。所以当字符串被分割时,作为 ',' 字符用作分隔符,结果字符串 将会 字符串[0] = "你好世界" 字符串[1] = "富吧" 分别。

当然,当用户在其字符串中键入“,”字符时,这很容易受到攻击,导致 在无法正确拆分的字符串中。例如,当用户输入“hello,world”时 在第一个文本框中和第二个文本框中的 "foo,bar" 中,最终的字符串将是 "hello,world,foo,bar" 和拆分结果将错误地是 4 个单独的字符串。

我想出了一个自定义转义字符的想法。也就是说,如果用户输入“,”字符,则必须在前面加上“/” 服务器端的字符。例如,如果用户输入“hello,world”和“foo,bar” ,最后的字符串将是“hello/,world,foo/,bar”,现在可以拆分,因为确切的 分隔符是已知的,它是单个 ',' 字符,前面没有 '/' 字符。

我写了一些java代码来处理它如下:

    String testText = "hello/,world,foo/,bar";
    String[] split = testText.split("[^/],");
    for(int i=0; i<split.length; i++)
    {
        System.out.println(split[i]);
    }

返回的结果是

字符串[0] = 你好/,世界

字符串[1] = foo/,bar

这是不正确的,因为单词“world”的“d”字符丢失了。 似乎这种情况下的分隔符是一些不/后跟''的字符,这是可以理解的。 但我想要类似“用分隔符'分割字符串',它只跟随不是'/'字符的字符。所以适用于我的情况,中间只有','字符 的字符串将被拆分,因此最终结果将是正确的,如下所示:

字符串[0] = 你好/,世界

字符串[1] = foo/,bar

我意识到我可能必须重写我的正则表达式,但我不知道如何。 欢迎提出任何建议。

【问题讨论】:

  • 尽量避免加入字符串。有太多方法可以做错事。例如,您也需要转义 /s。有人可以输入“hello/”和“world”。这将导致 '"hello/,world"'。
  • “欢迎提出任何建议。”提出问题。

标签: java regex escaping


【解决方案1】:

在背后使用负面的目光

testText.split("(?<!/),");

否定的lookbehind确保在,之前没有/而不匹配它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2018-04-19
    • 2011-07-03
    相关资源
    最近更新 更多