我有一个逗号分隔的十六进制数字列表,如下所示,
aaffd,123,1,d3213,aaa,f
aaa,dd,1234,d,c
我希望pcregrep的正则表达式只匹配包含十六进制数字的行,其中每个十六进制数字都有奇数个字符。
应该匹配:
aaffd,123,1,d3213,aaa,f
1
2,345,1
不应匹配:
ad,ad
1,23,1,333
我正在尝试使用此正则表达式 ([0-9a-f] ,? |((?:(?:[0-9a-f] {2})+ [0-9a-f]),?))+
但是它也捕获了不必要的行。如链接所示 https://regex101.com/r/uvJcbD/5
如何仅捕获包含十六进制数字的行,其中每个十六进制数字具有奇数个字符?预先谢谢你。
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以通过在此范围checkBox.setStyle("-fx-body-color: red;");
上重复零次或多次,然后再在该范围内重复1次,来匹配奇数个字符。
通过重复前一个模式零次或多次但后面带有逗号来结束此操作。
[a-f0-9]{2}
说明
^(?:[a-f0-9]{2})*[a-f0-9](?:,(?:[a-f0-9]{2})*[a-f0-9])*$
字符串的开头^
非捕获组
(?:
匹配2个字符a-f0-9 [a-f0-9]{2}
关闭非捕获组并重复0次以上)*
匹配字符a-f0-9 [a-f0-9]
非捕获组
(?:
匹配逗号,
非捕获组
(?:
匹配2个字符a-f0-9 [a-f0-9]{2}
关闭非捕获组并重复0次以上)*
匹配字符a-f0-9 [a-f0-9]
关闭非捕获组)*
字符串的结尾答案 2 :(得分:0)
这应该做到:
^(?:\b\w(?:\w\w)*\b,?)*$
它与无限个包含奇数个字符的 words 匹配。它使用单词边界(\b
)来检测单词的开头和结尾,并允许使用可选的逗号(以便与最后一个匹配)。
如果您还希望对十六进制字符(即仅有效的十六进制字符)进行语法检查,请使用
^(?:\b[a-f0-9](?:[a-f0-9]{2})*\b,?)*$