2011-04-07 29 views
9

Có ai biết làm thế nào để đối sánh số chẵn và số lẻ của chữ cái bằng regexp trong mysql không? tôi cần phải phù hợp như một số lượng thậm chí của A theo sau bởi một số lẻ của G và sau đó ít nhất một TC? Ví dụ: acgtccAAAAGGGTCatg sẽ khớp với nhau. Đó là một cái gì đó cho dna trình tựLàm thế nào để bạn kết hợp số chẵn của chữ hoặc số lẻ của chữ bằng cách sử dụng regexp cho mysql

Trả lời

22

Một số chẵn A có thể được biểu thị là (AA)+ (một hoặc nhiều trường hợp AA; vì vậy nó sẽ khớp với AA, AAAA, AAAAAA ...). Một số lẻ G có thể được biểu thị bằng G(GG)* (một G theo sau là 0 hoặc 30 trường hợp GG, để khớp với G, GGG, GGGGG ...).

Đặt cùng nhau và bạn đã có:

/(AA)+G(GG)*TC/ 

Tuy nhiên, vì động cơ regex sẽ cố gắng để phù hợp càng nhiều càng tốt, biểu thức này sẽ thực sự phù hợp với một chuỗi con của AAAGGGTC (tức AAGGGTC.)! Để ngăn chặn điều đó, bạn có thể sử dụng một negative lookbehind để đảm bảo rằng các nhân vật trước A đầu tiên không phải là A khác:

/(?<!A)(AA)+G(GG)*TC/ 

... ngoại trừ việc MySQL không hỗ trợ lookarounds trong regexes của họ.

gì bạn có thể làm thay vào đó là xác định rằng mô hình một trong hai bắt đầu vào đầu của chuỗi (anchored bởi ^), hoặc là trước bởi một nhân vật đó không phải là A:

/(^|[^A])(AA)+G(GG)*TC/ 

Nhưng lưu ý rằng với điều này mô hình một nhân vật phụ sẽ được chụp nếu mẫu không được tìm thấy ở đầu chuỗi, do đó bạn sẽ phải cắt của ký tự đầu tiên nếu nó không phải là A.

1

Bạn có lẽ có thể thử một cái gì đó tương tự (AA) * (GG) * GTC

Tôi nghĩ rằng sẽ làm các trick. Không biết nếu có một cú pháp đặc biệt cho mysql mặc dù

+0

không hoạt động cho tôi vì tôi đã làm điều gì đó như thế này để kiểm tra nó nếu nó sẽ trả về false cho tôi – thunderb0lt

+0

chọn 'AAAAAGGGGGTCA' regexp '(AA) * (GG) * G'; – thunderb0lt

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