POSIX括号表达式的正则表达式在bash中不起作用

时间:2015-05-25 10:01:55

标签: regex bash posix

我有这个在Rubular中运行的正则表达式

value[[:space:]]*=[[[:digit:]]\.]+>([[[:alpha:]][[:space:]]*\/]+)

在这篇文章中:

<option value =12.34.567>London</option>
<option value =89.12.345>New York / San Francisco</option>

它给出了结果:

Match 1
1.  12.34.567
2.  London
Match 2
1.  89.12.345
2.  New York / San Francisco

这就是我想要的。但是当我在bash脚本中使用正则表达式时:

#!/usr/bin/env bash

regex="value[[:space:]]*=([[[:digit:]]\.]+)>([[[:alpha:]][[:space:]]*\/]+)"

while read line
do
    echo $line
    if [[ $line =~ $regex ]]; then
        echo ${BASH_REMATCH}
    fi
done < test.html

它不起作用(test.html有上面的html示例。)

从测试开始,我认为它会陷入分组

[[[:digit:]]\.]+

bash是否以不同于ruby的方式处理正则表达式?

1 个答案:

答案 0 :(得分:2)

我建议您将正则表达式更改为

regex="value[[:space:]]*=([[:digit:].]+)>([[:alpha:][:space:]*/]+)"

DEMO

    [[:digit:].]
    ^   ^    ^^^
    |   |    |||-> end of char class
 start digit |-> DOT
            OR

在pcre中,上述内容将写为[\d.]