编写一个包含三个字母实例的正则表达式,但有例外

时间:2016-01-27 22:41:09

标签: regex

我如何编写一个匹配包含三个Y实例(大写Y)的字符串的正则表达式,不包括Y的实例:

  1. 在前面加上:数字(0-9),+(加号), - (减号),“(双引号)或A(大写A),忽略空格和

    < / LI>
  2. 后跟a:u,],Q,T,O或t。

  3. 日期的一部分(MAY)

  4. 例如:

    1. Y Y Y(匹配)
    2. Y Y 21- Yu&amp; RP12BE15(不匹配)
    3. Y Y 21- Yu&amp; RP12BE15Y(确实匹配)
    4. F19 vs40KETAPY Y Y(确实匹配)
    5. Y 25-15BE22Y Y(确实匹配)
    6. Y g ^ 24-tu&amp;或15BE13Y F / M 4YO 14MAY GCCN(不匹配)
    7. Y g ^ 24-tu&amp;或15BE13Y F / M 4YO 14MAY GCCY(确实匹配)
    8. 我试了一下regex101(click here),但我不知道如何处理更复杂的例子。

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

&#13;
&#13;
connection.query('SELECT `keys`.*,`transaction`.*,`keys`.`id` as kid, `transaction`.`id` as tid  FROM `transaction` JOIN `keys` ON `keys`.`id` = `transaction`.`keys_id` WHERE `transaction`.`status_pay`= 1 and `transaction`.`status` = 1').then(function (rows) {
                    async.each(rows, function (record, next) {
                        async.each(inventory, function (rec, nex) {
                            connection.query('UPDATE `transaction` SET `amount_two`= `amount_two` + 1 WHERE `id`= \''+record.tid+'\'').then(function (err, res) {
                                console.log('3');
                            });
                            console.log(rec.id); /// 4317648454 ... etc..
                        });
                    });
                });
&#13;
&#13;
&#13;

答案 1 :(得分:0)

这归结为:

not_this|not_that|leave_this|(but_this_is_what_I_want)

翻译成正则表达式, 可以

[-+\d\"]Y|Y[u\]QTOt]|(?i)MAY(?i-)(*SKIP)(*FAIL)|((?:Y\s*){3})
# -, + or digit before Y or
# Y, followed by u, a ], QTOt or
# if in MAY (case insensitive, this is what (?i) is for
# (*SKIP)(*FAIL) <-- important, do not backtrack
# or Y, followed by whitespaces, captured in a group, three times

以下粗体字母匹配:

Y Y Y
Y Y 21- Yu&amp; RP12BE15
Y Y 21- Yu&amp; RP12BE15Y
F19 vs40KETAP Y Y Y
Y 25-15BE22Y Y
Y g ^ 24-tu&amp;或15BE13Y F / M 4YO 14MAY GCCN
Y g ^ 24-tu&amp;或15BE13Y F / M 4YO 14MAY GCCY

demo can be found on regex101.com,这可以在PHP中使用(例如,您没有指定任何编程语言)。这是你最初的目的吗?