【发布时间】:2016-03-23 16:35:05
【问题描述】:
这是我一直在尝试的一个正则表达式:
(?:"[^"]*"[^"]*)*?\"{1}([^"]*?([']{1,})[^"]*?)\"
这可能不是实现我想做的最干净也不是最有效的方法,但我想我快到了。
我的目标是匹配双引号 (") 之间的任何单引号 (')被引用的,因此需要有奇数个双引号在它前面。我知道现在它只匹配第一组单引号,没关系。我最终会使用这个正则表达式替换第一次出现,然后迭代并再次使用它来替换其他的,只要有一些.
这里有几个例子:
- " 这是一个带有引号的随机句子',引号应该匹配"
- “这里没有引用就是问题所在”这里的任何内容不应该匹配,但现在可以:'。
- "Some text" some more text" this is a quote : ' that should match"
- " 当这里有引号 (') 时,另一个不起作用:" ' 这很完美",即使您删除第一个:" (')" 由于贪婪 (我认为 ) 但是如果你删除括号之间的那些,另一个是匹配的,我不希望发生这种情况。
- 另一个例子是这个:以下应该不起作用,但它确实“这是被引用的”而不是这个:(')“而且这也被引用了”
请注意,我真的不认为自己是专家,几天前除了经典 [a-zA-Z0-9] 之外我几乎一无所知...欢迎任何帮助,我可能忽略了一些基本的东西。
我一直在这里工作: https://regex101.com/r/aE7iB8/1
【问题讨论】:
-
我认为你的假设不正确,那就是它前面需要有奇数个双引号(取决于允许的文本)。反例
'"""\'"'呢?您绝对应该使用堆栈,而不是使用正则表达式。 -
我不确定我理解你的意思,如果我们检查它前面是否有奇数个 " ,第二个 ' 不会匹配吗?
-
这完全取决于您是否允许嵌套引号。无论哪种方式,正则表达式都不适合这项工作。
-
如果我在它前面添加另一个双引号,它就会不匹配,这就是我的目标:“这是一些引用的文本”这不是“这是”,也许我不明白你的意思
-
啊,不会有嵌套引号