正则表达式以捕获具有奇数个字符的十六进制数字

时间:2018-10-28 13:38:05

标签: regex pcre

我有一个逗号分隔的十六进制数字列表,如下所示,

    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

如何仅捕获包含十六进制数字的行,其中每个十六进制数字具有奇数个字符?预先谢谢你。

3 个答案:

答案 0 :(得分:0)

这可以完成工作:

wait()

DEMO

答案 1 :(得分:0)

您可以通过在此范围checkBox.setStyle("-fx-body-color: red;"); 上重复零次或多次,然后再在该范围内重复1次,来匹配奇数个字符。

通过重复前一个模式零次或多次但后面带有逗号来结束此操作。

[a-f0-9]{2}

Regex demo

说明

  • ^(?:[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,?)*$

See it (the first one) here at regex101