您好我厌倦了在PHP中使用RegEx。以下是我喜欢的内容:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author Jack <J@ck>
* https://stackoverflow.com/questions/49266832/integer-in-compareto
*/
public class ListReverse {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4);
// Creates new list wit reverse order
List<Integer> reverseList = list.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
System.out.println(reverseList);
}
}
问题是我只得到
<a="300">
<a="300"b="300">
<b="300">
使用以下RegEx:
<a="300">
<b="300">
我需要改变什么,我得到所有三个元素?有ANDOR运算符吗?
答案 0 :(得分:1)
假设你的问题是一个简单的字符串处理而不是严肃的解析,我会像这样修改你的正则表达式:
<(a|b)="[0-9]+".*>
我添加了.*
以允许"
和>
之间的字符。
或稍微有点味道的版本:
<[ab]="\d+"[^>]*?>
|
管道单个字符比[...]
\d
用于数字系列[^>]*?
代表>
答案 1 :(得分:0)
您需要一个额外的分组来指定您接受多种类型的分组:
echo '<a="300">
<a="300"b="300">
<b="300">' | egrep '<((a|b)="[0-9]*")+>'
<a="300">
<a="300"b="300">
<b="300">
答案 2 :(得分:0)
正则表达式不是布尔逻辑。正则表达式中的|
符号不是OR运算符;它被称为交替,它的工作方式相似,但并不完全相同。如果您只是尝试匹配多个字符中的一个,则应使用方括号[]
来创建字符集。在这种情况下,[ab]
匹配a
或b
,就像[0-9]
匹配0
或1
或2
等一样。< / p>
这是我建议的模式
<[ab]="\d+"(?:[ab]="\d+")?>