正则表达式(A或A或A& B),(A但不是B)

时间:2014-01-15 07:00:32

标签: php regex

有人可以帮助我在字符串上建立一个正则表达式,我的同事问我,但我从未找到A& B或A ^ B的正则表达式。

这是我的实际代码

'(Eclipse|Sun)' => array(
                     'Got' =>  'Power 50',
                     'World' => 'EU'),);

如何执行正则表达式以便在以下选项之间进行选择: “Eclipse”或“Sun”或“Eclipse& Sun”。

我的第二个问题是[^]列出哪些字符我不想要。 如何执行正则表达式来说“Eclipse [^ Oracle]” 因为我想用“Eclipse”选择字符串,但我不希望字符串包含“Eclipse”和“Oracle”。

'Eclipse[^Oracle]' => array(
                     'Note' =>  'Density 200',
                     'City' => 'Prague'),);

2 个答案:

答案 0 :(得分:1)

  

问题:我如何执行正则表达式以选择:“Eclipse”或“Sun”或“Eclipse& Sun”。

答案:您可以使用轮换来完成此操作。像这样:

(Eclipse&Sun|Eclipse|Sun)

交替运作的方式是,如果它与第一个表达式匹配,它将不会尝试第二个和第三个表达式。创建表达式时需要考虑到这一点。


  

问题:如何执行正则表达式来说“Eclipse [^ Oracle]”因为我想用“Eclipse”选择字符串,但我不希望字符串包含“Eclipse” “和”甲骨文“。

答案:如果只想在不存在其他单词时匹配某些内容,可以使用正向前瞻来验证字符串,然后再进行匹配。像这样:

^.*(?=^.*(Eclipse))(?!^.*Oracle).*$
  • 如果Eclipse存在,则匹配将通过(?=^.*Eclipse)
    • 它会将'Eclipse'放入一个反序列号为1
    • 的捕获组中
  • 如果Oracle存在(?!^.*Oracle)
  • ,则匹配将失败

正则表达式演示:

Regex101, Positive Lookaheads

答案 1 :(得分:0)

首先:Eclipse OR Sun OR (Eclipse AND Sun) <=> Eclipse OR Sun

if (preg_match('~\b(?:Eclipse|Sun)\b~', $str)) {
...
} else { ... }

第二:Eclipse^Oracle

if (preg_match('~(?=.*\bEclipse\b)(?!.*\bOracle\b)~', $str)) {

(?=...)后跟
(?!...)后面没有