我需要检查字符串是否匹配此特定模式。
模式是:
(数字)(允许所有字符)(数字)
,并且数字可能带有逗号(“。”或“,”)!
例如,输入可以是Long version
或 2018-11-11 02:07:28.858 INFO 4310 --- [on(6)-127.0.0.1] org.mongodb.driver.connection : Opened connection [connectionId{localValue:2, serverValue:183}] to localhost:27017
Person [id=null, name=Joe, email=aa@aa.aa, createdOn=null, modifiedOn=null, version=null]
2018-11-11 02:07:31.519 DEBUG 4310 --- [nio-8080-exec-1] o.s.data.auditing.AuditingHandler : Touched Person [id=null, name=Joe, email=aa@aa.aa, createdOn=null, modifiedOn=2018-11-11T02:07:31.518, version=0] - Last modification at 2018-11-11T02:07:31.518 by unknown
2018-11-11 02:07:31.525 DEBUG 4310 --- [nio-8080-exec-1] o.s.data.mongodb.core.MongoTemplate : Inserting Document containing fields: [modifiedOn, version, name, email, _class] in collection: person
2018-11-11 02:07:31.564 DEBUG 4310 --- [nio-8080-exec-1] o.s.d.m.r.query.MongoQueryCreator : Created query Query: { "name" : "Joe" }, Fields: { }, Sort: { }
2018-11-11 02:07:31.571 DEBUG 4310 --- [nio-8080-exec-1] o.s.data.mongodb.core.MongoTemplate : find using query: { "name" : "Joe" } fields: Document{{}} for class: class com.seedu.server.model.Person in collection: person
Person [id=5be71e631ad34410d6a3b123, name=Joe, email=aa@aa.aa, createdOn=null, modifiedOn=2018-11-11T02:07:31.518, version=0]
2018-11-11 02:07:31.590 DEBUG 4310 --- [nio-8080-exec-1] o.s.data.auditing.AuditingHandler : Touched Person [id=5be71e631ad34410d6a3b123, name=Joe, email=bb@bb.bb, createdOn=null, modifiedOn=2018-11-11T02:07:31.590, version=1] - Last modification at 2018-11-11T02:07:31.590 by unknown
2018-11-11 02:07:31.598 DEBUG 4310 --- [nio-8080-exec-1] o.s.data.mongodb.core.MongoTemplate : Calling update using query: { "_id" : { "$oid" : "5be71e631ad34410d6a3b123" }, "version" : { "$numberLong" : "0" } } and update: { "modifiedOn" : { "$date" : 1541873251590 }, "version" : { "$numberLong" : "1" }, "name" : "Joe", "email" : "bb@bb.bb", "_class" : "com.seedu.server.model.Person" } in collection: person
2018-11-11 02:07:31.602 DEBUG 4310 --- [nio-8080-exec-1] o.s.d.m.r.query.MongoQueryCreator : Created query Query: { "name" : "Joe" }, Fields: { }, Sort: { }
2018-11-11 02:07:31.602 DEBUG 4310 --- [nio-8080-exec-1] o.s.data.mongodb.core.MongoTemplate : find using query: { "name" : "Joe" } fields: Document{{}} for class: class com.seedu.server.model.Person in collection: person
2018-11-11 02:07:31.603 DEBUG 4310 --- [nio-8080-exec-1] o.s.d.m.r.query.MongoQueryCreator : Created query Query: { "email" : "bb@bb.bb" }, Fields: { }, Sort: { }
2018-11-11 02:07:31.604 DEBUG 4310 --- [nio-8080-exec-1] o.s.data.mongodb.core.MongoTemplate : find using query: { "email" : "bb@bb.bb" } fields: Document{{}} for class: class com.seedu.server.model.Person in collection: person
Person [id=5be71e631ad34410d6a3b123, name=Joe, email=bb@bb.bb, createdOn=null, modifiedOn=2018-11-11T02:07:31.590, version=1]
Person [id=5be71e631ad34410d6a3b123, name=Joe, email=bb@bb.bb, createdOn=null, modifiedOn=2018-11-11T02:07:31.590, version=1]
。
我尝试了500+400
,但没有成功!
我知道我必须使用方法Pattern.match(regex,String),但是我找不到正确的正则表达式。
答案 0 :(得分:1)
处理数字可能很困难。这种方法将处理您的示例,但请仔细检查。我也没有在中间分组中使用“所有字符”,因为“所有”将包括数字,所以我认为查找下一个非数字将是适当的。
此Java正则表达式处理要求:
"((-?)[\\d,.]+)([^\\d-]+)((-?)[\\d,.]+)"
但是,上面有一个潜在的问题。考虑以下:
300 - -200
。前述情况与这种情况不符。
现在,基于示例,我认为重点是应该有一个有效的运算符。数学运算的数量可能有限,因此我会将中间的运算符列入白名单。因此,类似于:
"((-?)[\\d,.]+)([\\s]*[*/+-]+[\\s]*)((-?)[\\d,.]+)"
我认为更合适。 [*/+-]
可以扩展为电力运营商^
等。现在,如果要开始在方程式中添加单词(例如mod
),则需要修改表达式。
答案 1 :(得分:0)
在正则表达式中,您必须对点\.
进行转义以使其在字面上匹配,并对\+
进行转义,否则它将使?
成为possessive quantifier。要匹配1个以上的数字,您必须使用量词[0-9]+
对于示例数据,您可以匹配1+位数字,后跟一个可选部分,该部分在开头和结尾处都匹配点或逗号。如果要匹配任何字符1次,则可以使用点。
例如,您也可以使用字符类[-+*]
来代替一些点,而不是使用点来列出一些运算符或列出您要匹配的内容。如果这是唯一的匹配项,则可以使用锚点来声明字符串的开头^
和结尾$
。
\d+(?:[.,]\d+)?.\d+(?:[.,]\d+)?
在Java中:
String regex = "\\d+(?:[.,]\\d+)?.\\d+(?:[.,]\\d+)?";
那将匹配:
\d+(?:[.,]\d+)?
1+位数字,后跟与.
或,
匹配的可选部分,后跟1+位数字.
匹配任意字符(使用。+
)重复1次以上