有人可以帮助我在字符串上建立一个正则表达式,我的同事问我,但我从未找到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'),);
答案 0 :(得分:1)
问题:我如何执行正则表达式以选择:“Eclipse”或“Sun”或“Eclipse& Sun”。
答案:您可以使用轮换来完成此操作。像这样:
(Eclipse&Sun|Eclipse|Sun)
交替运作的方式是,如果它与第一个表达式匹配,它将不会尝试第二个和第三个表达式。创建表达式时需要考虑到这一点。
问题:如何执行正则表达式来说“Eclipse [^ Oracle]”因为我想用“Eclipse”选择字符串,但我不希望字符串包含“Eclipse” “和”甲骨文“。
答案:如果只想在不存在其他单词时匹配某些内容,可以使用正向前瞻来验证字符串,然后再进行匹配。像这样:
^.*(?=^.*(Eclipse))(?!^.*Oracle).*$
(?=^.*Eclipse)
1
(?!^.*Oracle)
正则表达式演示:
答案 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)) {
(?=...)
后跟
(?!...)
后面没有