php条件或,PHP: 条件子组 - Manual

条件子组

可以使匹配器根据一个断言的结果,

或者之前的一个捕获子组是否匹配来条件式的匹配一个子组或者在两个可选子组中选择。

条件子组的两种语法如下:

(?(condition)yes-pattern)

(?(condition)yes-pattern|no-pattern)

如果条件满足,使用 yes-pattern,其他情况使用 no-pattern(如果指定了)。

如果有超过 2 个的可选子组,会产生给一个编译期错误。

条件一共有两种。如果在(condition)的括号内是数字组成的文本,

条件在该数字代表的(之前的)子组得到匹配时满足(即使用 yes-pattern)。

考虑下面的模式,

为了使其易于阅读其中增加了一些空白字符(查看PCRE_EXTENDED 选项)并且将其分为三个部分:

( \( )? [^()]+ (?(1) \) )

模式的第一部分匹配一个可选的左括号,并且如果该字符出现,

设置其为第一个子组的捕获子串。第二部分匹配一个或多个非括号字符。

第三部分是一个条件子组,它会测试第一个子组是否匹配,如果匹配到了,

也就是说目标字符串以左括号开始,条件为true,

那么使用 yes-pattern 也就是这里需要匹配一个右括号。其他情况下,

既然 no-pattern 没有出现,这个子组就不匹配任何东西。换句话说,

这个模式匹配一个没有括号的或者闭合括号包裹的字符序列。

如果条件式字符串 (R),它在得到对模式或子模式的递归调用时满足。 在”最上级”,

条件总是false。

如果条件不是数字序列或(R),它就必须是一个断言。这里的断言可以使任意的,积极,

消极,正向,后向都是可以的。考虑这个模式, 同样为了方便阅读,

增加了一些空白字符,并且在第二行有两个可选路径。

(?(?=[^a-z]*[a-z])

\d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} )

条件式一个正向积极断言,匹配一个可选的非小写字母字符序列紧接着一个小写字母。

换一种说法,它测试目标中至少出现一个小写字母,如果小写字母发现,

目标匹配第一个可选分支,其他情况下它匹配第二个分支。

这个模式匹配两种格式的字符串:dd-aaa-dd 或 dd-dd-dd。aaa 代表小写字母,

dd 是数字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值