当前位置:  开发笔记 > 编程语言 > 正文

正则表达式检索引用的字符串和引用字符

如何解决《正则表达式检索引用的字符串和引用字符》经验,为你挑选了0个好方法。

我有一种语言,它将字符串定义为由单引号或双引号分隔,其中分隔符在字符串中通过加倍来转义.例如,以下所有内容都是合法字符串:

'This isn''t easy to parse.'
'Then John said, "Hello Tim!"'
"This isn't easy to parse."
"Then John said, ""Hello Tim!"""

我有一个字符串集合(上面定义),由不包含引号的东西分隔.我试图用正则表达式做的是解析列表中的每个字符串.例如,这是一个输入:

"一些字符串#1"或"一些字符串#2"和"一些'字符串'#3"XOR
'一些"字符串"#4'HOWDY"一些""字符串""#5"FOO'一些''字符串'' #6'

用于确定字符串是否具有这种形式的正则表达式是微不足道的:

^(?:"(?:[^"]|"")*"|'(?:[^']|'')*')(?:\s+[^"'\s]+\s+(?:"(?:[^"]|"")*"|'(?:[^']|'')*')*

在运行上面的表达式来测试它是否是这种形式之后,我需要另一个正则表达式来从输入中获取每个分隔的字符串.我计划这样做如下:

Pattern pattern = Pattern.compile("What REGEX goes here?");
Matcher matcher = pattern.matcher(inputString);
int startIndex = 0;
while (matcher.find(startIndex))
{
    String quote        = matcher.group(1);
    String quotedString = matcher.group(2);
    ...
    startIndex = matcher.end();
}

我想要一个正则表达式来捕获组#1中的引号字符,以及组#2中的引号中的文本(我正在使用Java Regex).所以,对于上面的输入,我正在寻找一个在每个循环迭代中产生以下输出的正则表达式:

Loop 1: matcher.group(1) = "
        matcher.group(2) = Some String #1
Loop 2: matcher.group(1) = '
        matcher.group(2) = Some String #2
Loop 3: matcher.group(1) = "
        matcher.group(2) = Some 'String' #3
Loop 4: matcher.group(1) = '
        matcher.group(2) = Some "String" #4
Loop 5: matcher.group(1) = "
        matcher.group(2) = Some ""String"" #5
Loop 6: matcher.group(1) = '
        matcher.group(2) = Some ''String'' #6

到目前为止我尝试过的模式(未转义,然后转义为Java代码):

(["'])((?:[^\1]|\1\1)*)\1
"([\"'])((?:[^\\1]|\\1\\1)*)\\1"

(?")(?(?:[^"]|"")*)"|(?')(?(?:[^']|'')*)'
"(?\")(?(?:[^\"]|\"\")*)\"|(?')(?(?:[^']|'')*)'"

尝试编译模式时,这两个都失败了.

这样的正则表达式可能吗?

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有