2015-05-06 14 views
12

Các documentation đề cập đến ba nhà khai thác cụ thể regex:Làm thế nào để phủ nhận toán tử đối sánh Groovy?

  • ~ trả lại một Pattern
  • =~ trả lại đơn một Matcher
  • ==~ trả lại một boolean

Bây giờ, làm thế nào tôi có thể phủ nhận người cuối cùng? (Tôi đồng ý rằng những người khác không thể có bất kỳ ý nghĩa phủ định.)

Tôi cố gắng suy nghĩ rõ ràng:

println 'ab' ==~ /^a.*/ // true: yay, matches, let's change the input 
println 'bb' ==~ /^a.*/ // false: of course it doesn't match, let's negate the operator 
println 'bb' !=~ /^a.*/ // true: yay, doesn't match, let change the input again 
println 'ab' !=~ /^a.*/ // true: ... ??? 

Tôi đoán cuối cùng hai nên được hiểu như thay này:

println 'abc' != ~/^b.*/ 

nơi tôi có thể thấy new String("abc") != new Pattern("^b.*")true.

+1

về nhà điều hành thực hiện điều này và '! (...)' không có tùy chọn? – cfrick

+0

Tôi không biết liệu có toán tử "không khớp" hay không, nhưng bạn luôn có thể phủ nhận kết quả như sau: 'println! ('Abc' == ~/^ a. * /)' –

+0

Sẽ rất tuyệt nếu có một cách ngắn gọn, nhưng nếu không, đó là một câu trả lời rõ ràng: (Tôi chỉ mong đợi nhiều hơn tôi đoán, như Perl đã '! ~'. – TWiStErRob

Trả lời

13

AFAIK, không có toán tử đối sánh cụm từ thông dụng phủ định trong Groovy.

Vì vậy, - như đã đề cập bởi cfrick - có vẻ như rằng câu trả lời tốt nhất là phủ nhận toàn bộ biểu thức:

println !('bb' ==~ /^a.*/) 

Một giải pháp khác là để đảo ngược các biểu hiện thường xuyên, nhưng có vẻ như với tôi để được ít có thể đọc :

How can I invert a regular expression in JavaScript?

+1

Tôi đồng ý, chúc may mắn đảo ngược bất kỳ http://emailregex.com nào :) – TWiStErRob

Các vấn đề liên quan