Php 正则表达式或
嗨,我厌倦了在PHP中使用正则表达式。以下是我喜欢的元素:Php 正则表达式或,php,regex,Php,Regex,嗨,我厌倦了在PHP中使用正则表达式。以下是我喜欢的元素: <a="300"> <a="300"b="300"> <b="300"> 问题是我只得到 <a="300"> <b="300"> 使用以下正则表达式: <(a|b)="[0-9]*"> 我必须改变什么,才能得到这三个元素?是否有AND或运算符?您需要一个额外的分组,以指定您将接受该类型的多个: echo '<a="300"> <a
<a="300">
<a="300"b="300">
<b="300">
问题是我只得到
<a="300">
<b="300">
使用以下正则表达式:
<(a|b)="[0-9]*">
我必须改变什么,才能得到这三个元素?是否有AND或运算符?您需要一个额外的分组,以指定您将接受该类型的多个:
echo '<a="300">
<a="300"b="300">
<b="300">' | egrep '<((a|b)="[0-9]*")+>'
<a="300">
<a="300"b="300">
<b="300">
echo'
“白鹭”
正则表达式不是布尔逻辑。正则表达式中的|
符号不是OR运算符;它被称为交替,其工作原理类似,但并不完全相同。如果只是尝试匹配多个字符中的一个,则应使用方括号[]
创建字符集。在这种情况下,[ab]
匹配a
或b
,就像[0-9]
匹配0
或1
或2
等一样
这是我建议的模式
假设您的问题是一个简单的字符串处理而不是严重的解析,我会修改您的正则表达式如下:
<(a|b)="[0-9]+".*>
- 带有
的管道单字符较不受|
[…]
用于数字系列\d
用于非[^>]*?
(a | b)
和[ab]
的区别是什么呢?我们为什么要使用方括号呢?这是一个成本低得多的操作,需要大约一半的逻辑步骤来解决。它更简洁,因为它不需要在进程拆分的每个选项之间插入字符。支持范围,因此如果要匹配a、b、c或d,可以编写[a-d]
,而不是(a | b | c | d)
。它也不会创建一个[可能不需要的]捕获组,通过交替使用,必须通过使用(?:)
而不是仅使用()
来避免该捕获组。如果我想找到宽度和高度,该怎么办?我能把这些也放在括号里吗?@ThiKool我不知道你说的是什么意思。如果你说的是在a和b之外匹配x和y,是的,这是可能的。你可以在这里测试@ThiKool no,(?:width | length)
是一个非常好的正则表达式,可以匹配任意一个单词。使用字符组([]
)并不能代替替换。是的,因果关系的例子缺少一些可靠的答案,为什么在“现实世界”中使用[ab]
而不是(?:a | b)
。
<[ab]="\d+"[^>]*?>