查找表达式中所有带 (" ") 和不带 (" ") 的词组

Find all phrases enclosed with (" ") and words without (" ") in an expression

正在使用的语言:PHP

假设我有这样一个表达式:

Ayala NOT ("Ayala Station" OR "Ayala Branch" OR "Joey Ayala")

而且我想提取下面的话:
- 阿亚拉
- 阿亚拉站
- Ayala Branch
- 乔伊·阿亚拉

我想检索所有用双引号 " "" 括起来的词组和独立的词,例如上例中的 Ayala , 但实验失败

尝试了多个正则表达式

第一次尝试:

"([^"]+)" - 我知道这个正则表达式是将 words/phrases 放在双引号内的正确正则表达式

第二次尝试:

~\w+(?:-\w+)*~ - 此正则表达式将从给定表达式或字符串

中获取所有单词

第三次尝试:

结合上面的2次尝试 "([^"]+)"|~\w+(?:-\w+)*~ - 我能够为我想要的输出生成我的用例,但是结合这两个,Ayala 词没有被提取

游乐场示例 regex101

第四次尝试:

尝试使用 "([^"]+)"|\S+ 但它包含特殊字符

我是否遗漏了正则表达式的内容?

交替的右侧不应该有正则表达式分隔符 - 正则表达式分隔符应该只围绕 整个模式(在 PHP 字符串分隔符旁边)。例如

"([^"]+)"|\w+(?:-\w+)*

如果你想一次捕获所有的匹配项,没有捕获组,你可以使用

(?<=")\b[^"]+(?=")|\w+(?:-\w+)*

https://regex101.com/r/nP6wM5/10

要在正则表达式本身中排除 NOT 和 OR,请使用:

(?<=")\b[^"]+(?=")|\b(?!(?:NOT|OR)(?!-))\w+(?:-\w+)*

在匹配独立词之前对它们进行负面预测。