当前位置: 技术问答>linux和unix
正则表达式匹配问题
来源: 互联网 发布时间:2015-07-20
本文导语: 正则表达式定义: Hexadecimal --> (+|-)?0x[A-Fa-f0-9]+ Integer --> (+|-)?[0-9]+ Real --> (+|-)?[0-9]+.[0-9]+ String1 --> ".*" String2 --> '.*' Variant --> $[A-Fa-f0-9]{2,10} Casting --> ([A-Za-z0-9]{2,10})[^,]+ Parameter --> ({Hexadecimal})|({Integer})|({Re...
正则表达式定义:
Hexadecimal --> (+|-)?0x[A-Fa-f0-9]+
Integer --> (+|-)?[0-9]+
Real --> (+|-)?[0-9]+.[0-9]+
String1 --> ".*"
String2 --> '.*'
Variant --> $[A-Fa-f0-9]{2,10}
Casting --> ([A-Za-z0-9]{2,10})[^,]+
Parameter --> ({Hexadecimal})|({Integer})|({Real})|({String1})|({String2})|({Variant})|({Casting})
ParameterList --> (({Parameter})(,{Parameter})*)?
为了方便理解,我把每个非终结符单独拿出来写, {XXXX}表示包含XXXX的正则表达式。我做了一个类可以解析上面的内容。但这个不是重点
先说重点。用 ParameterList来匹配:
1234,122.22,"fff"
之类的参数列表毫无问题,但是他居然可以匹配
1234zzzz,122.22hehe,"fff"
这样的错误格式,如果在ParameterList的定义前面加上^,那么就只能匹配开头的1234,如果在ParameterList定义后面加$,那么只能匹配"fff",如果两个都加,那么正常的参数列表都无法匹配了
我实在是找不到我的错误,我哪里写错了呢?
Hexadecimal --> (+|-)?0x[A-Fa-f0-9]+
Integer --> (+|-)?[0-9]+
Real --> (+|-)?[0-9]+.[0-9]+
String1 --> ".*"
String2 --> '.*'
Variant --> $[A-Fa-f0-9]{2,10}
Casting --> ([A-Za-z0-9]{2,10})[^,]+
Parameter --> ({Hexadecimal})|({Integer})|({Real})|({String1})|({String2})|({Variant})|({Casting})
ParameterList --> (({Parameter})(,{Parameter})*)?
为了方便理解,我把每个非终结符单独拿出来写, {XXXX}表示包含XXXX的正则表达式。我做了一个类可以解析上面的内容。但这个不是重点
先说重点。用 ParameterList来匹配:
1234,122.22,"fff"
之类的参数列表毫无问题,但是他居然可以匹配
1234zzzz,122.22hehe,"fff"
这样的错误格式,如果在ParameterList的定义前面加上^,那么就只能匹配开头的1234,如果在ParameterList定义后面加$,那么只能匹配"fff",如果两个都加,那么正常的参数列表都无法匹配了
我实在是找不到我的错误,我哪里写错了呢?
|
"1234zzz" ~= /(+|-)?0x[A-Fa-f0-9]+/
RE matches portion not all.
RE matches portion not all.