Php Regex:如何停止对某些不存在的单词的匹配
我承认,这个标题太令人困惑了——如果你想改变它,欢迎你 我正在研究PHP和preg_match函数 问题是这个字符串(只是一个示例)Php Regex:如何停止对某些不存在的单词的匹配,php,regex,preg-match,Php,Regex,Preg Match,我承认,这个标题太令人困惑了——如果你想改变它,欢迎你 我正在研究PHP和preg_match函数 问题是这个字符串(只是一个示例) 在更新级联时删除级联(另一个示例..) 我需要查找“删除”和“更新”值,但它们不能同时存在 所以有时候我会这样: ON DELETE something 其他时间: ON UPDATE something 其他时候两者都有 所以,这个正则表达式并没有涵盖所有的可能性: /ON DELETE (.+) ON UPDATE (.+)/ 如果我把 /ON DELE
在更新级联时删除级联
(另一个示例..)
我需要查找“删除”和“更新”值,但它们不能同时存在
所以有时候我会这样:
ON DELETE something
其他时间:
ON UPDATE something
其他时候两者都有
所以,这个正则表达式并没有涵盖所有的可能性:
/ON DELETE (.+) ON UPDATE (.+)/
如果我把
/ON DELETE(+)(ON UPDATE(+.*)?/
——涵盖没有ON UPDATE的情况
若存在更新时,第一组结果为“更新级联时设置NULL”
我如何才能做到这一点?如果要避免匹配过多,请使用lookaround: 消极前瞻:
/ON DELETE ((?:(?! ON UPDATE).)+)( ON UPDATE (.*))?/
要捕获忽略订单的内容,请执行以下操作:
/(?:ON DELETE ((?:(?! ON UPDATE).)+)|ON UPDATE ((?:(?! ON DELETE).)+))/
但你到底想要什么?如果两者都存在,请将其删除?用于检查您的regexppsuedo代码,以匹配删除时和更新时发生的情况,但不能同时检查两者
function valid(str)
{
matchDelete=regex(str, 'ON DELETE'); //true for match
matchUpdate=regex(str, 'ON UPDATE'); //true for match
if( (matchDelete || matchUpdate ) && !(matchDelete && matchUpdate) )
{
valid match
}
}
好的,我更新了我的答案。如果您想匹配两者是否都存在,并且如果其中只有一个存在,则第二个正则表达式应该进行匹配。
function valid(str)
{
matchDelete=regex(str, 'ON DELETE'); //true for match
matchUpdate=regex(str, 'ON UPDATE'); //true for match
if( (matchDelete || matchUpdate ) && !(matchDelete && matchUpdate) )
{
valid match
}
}