你能在正则表达式的模式部分使用反向引用吗?

Cam*_*oft 3 php regex backreference

有没有办法在正则表达式模式中支持引用?

示例输入字符串:

Here is "some quoted" text.
Run Code Online (Sandbox Code Playgroud)

假设我想拉出引用的文本,我可以创建以下表达式:

"([^"]+)"
Run Code Online (Sandbox Code Playgroud)

这个正则表达式会匹配some quoted.

说我希望它也支持单引号,我可以将表达式更改为:

["']([^"']+)["']
Run Code Online (Sandbox Code Playgroud)

但是,如果输入字符串混合了引号,说Here is 'some quoted" text.我不希望正则表达式匹配.目前第二个例子中的正则表达式仍然匹配.

我想能做的是如果第一个报价是双引号,那么收盘报价必须是双倍.如果开始报价是单引号,则结束报价必须是单引号.

我可以使用后退参考来实现这一目标吗?


我的另一个相关问题:使用正则表达式在引号之间获取文本

cod*_*ict 5

你可以使用正则表达式:

(["'])[^"']+\1
Run Code Online (Sandbox Code Playgroud)
  • () :用于分组
  • [..]:是char类.所以["'] 匹配"'等同于"|'
  • [^..]:带有否定的char类.它匹配任何未列出的字符^
  • + :一个或多个的量词
  • \1 :反向引用第一组 (["'])

PHP你用它时:

preg_match('#(["\'])[^"\']+\1#',$str)
Run Code Online (Sandbox Code Playgroud)

工作实例