我想对待这样的表达式:
表达式1 - >的总和$ 4,8, 'X' $
表达式2 - >的总和$ 2,15, '(X ^ 3 + 3)/(X + 1)' $
我正在使用正则表达式来识别模式:
sum\$[0-9]+[,][0-9]+[,]['][.]*[\w]*[']\$
但它只适用于表达式1,为什么表示任何字符的点(。)似乎不起作用?我是否必须以特殊方式处理括号?
答案 0 :(得分:3)
.
是一个与任意1个字符匹配的元字符。还有其他元字符,如\d
,它们将匹配0-9之间的1个字母。 某些元字符在字符类[]
中失去了它们的特殊含义。因此,字符类[]
内的点不再是元字符,将被视为字面点。
.*
和.*?
是两回事。前者会贪婪地匹配一切,后来很懒惰。例如。取一个字符串:abbcbbbc
。现在
a.*c
将匹配完整字符串abbcbbbc
,而a.*?c
仅匹配abbc
你可以试试这样的东西。
sum\$\d+,\d+,'.*?'\$
答案 1 :(得分:0)
[]
的工作方式是匹配字符完全匹配所以在您的情况下,您必须拥有.
而不是[]
,如此:
sum\$[0-9]+[,][0-9]+[,]['].*[\w]*[']\$
这个正则表达式也匹配表达式2
答案 2 :(得分:0)
你可以试试这个
sum\$[0-9]+[,][0-9]+[,]['][^']*[\w]*[']\$
用[^']
替换[。]