2009-08-06 31 views

Trả lời

114

Nếu bạn muốn để phù hợp với những dòng bắt đầu với điểm dừng sử dụng

^stop 

Nếu bạn muốn để phù hợp với các dòng bắt đầu với từ dừng tiếp theo là một không gian

^stop\s 

Hoặc, nếu bạn muốn các dòng khớp bắt đầu bằng từ dừng nhưng theo sau là dấu cách hoặc bất kỳ ký tự không phải từ nào khác mà bạn có thể sử dụng (hương vị regex của bạn cho phép)

^stop\W 

Mặt khác, những gì sau phù hợp với một từ lúc bắt đầu của một chuỗi trên hầu hết các hương vị regex (trong những hương vị \ w phù hợp với đối diện của \ W)

^\w 

Nếu hương vị của bạn không có \ phím tắt w, bạn có thể sử dụng

^[a-zA-Z0-9]+ 

Hãy cảnh giác rằng thành ngữ thứ hai này sẽ chỉ khớp với chữ cái và số, không có biểu tượng nào.

Kiểm tra hương vị của nhãn hiệu regex của bạn biết những gì các phím tắt được phép và chính xác những gì họ phù hợp (và làm thế nào để họ đối phó với Unicode.)

+14

+1 để khái quát câu trả lời của bạn. Tôi rất thích xem thêm về điều này trên Stack Overflow. Làm cho nó trở thành một nguồn tài nguyên học tập tốt hơn theo ý kiến ​​của tôi. – Jim

6
/stop([a-zA-Z])+/ 

sẽ phù hợp với bất kỳ từ nào stop (dừng lại, dừng lại, dừng lại, vv)

Tuy nhiên, nếu bạn chỉ muốn để phù hợp với "dừng lại" vào lúc bắt đầu của một chuỗi

sẽ làm: D

+2

Điều này sẽ khớp với "không dừng lại" –

+0

Tôi đọc lại câu hỏi và thay đổi câu trả lời của tôi: D – Mez

+1

Điều này sẽ không khớp với stop123 hoặc dừng. –

46

Hãy thử điều này:

/^stop.*$/ 

Giải thích:

  • / charachters phân định các biểu thức chính quy (ví dụ: họ không phải là một phần của Regex per se)
  • ^ nghĩa trận đấu vào lúc bắt đầu của dòng
  • . theo sau là * nghĩa là khớp với bất kỳ ký tự nào (.), Bất kỳ số lần (*)
  • $ có nghĩa là sự kết thúc của dòng

Nếu bạn muốn thực thi mà dừng lại được theo sau bởi một khoảng trắng, bạn có thể sửa đổi các RegEx như vậy:

/^stop\s+.*$/ 
  • \ s nghĩa là bất kỳ ký tự khoảng trắng
  • + f ollowing các \ s nghĩa phải có ít nhất một ký tự khoảng trắng sau đây sau khi từ dừng

Lưu ý: Cũng nên nhớ rằng RegEx trên đòi hỏi rằng từ điểm dừng được theo sau bởi một không gian! Vì vậy, nó sẽ không phù hợp với một dòng duy nhất chứa: dừng

+2

. * $ Là dự phòng. – Mez

+0

Không phải tất cả ngôn ngữ đều sử dụng forwardslashes để phân định các regex. – JAB

+1

@Cat Megex: Đó chính xác là lý do tôi thêm giải thích. Nếu ngôn ngữ của bạn sử dụng thứ gì đó khác để phân định regex, hãy thay thế/bằng ký tự thích hợp –

6

Nếu bạn muốn kết hợp bất cứ điều gì mà bắt đầu với "dừng lại" bao gồm "dừng lại đi", "dừng lại" và "dừng lại" sử dụng:

^stop 

Nếu bạn muốn kết hợp các từ dừng tiếp theo bất cứ điều gì như trong "dừng lại đi", "ngăn chặn điều này", nhưng không phải là "dừng lại" chứ không phải "dừng lại" sử dụng:

^stop\W 
0

tôi muốn tư vấn chống lại một biểu thức chính quy đơn giản ch cho vấn đề này. Có quá nhiều từ là các chất nền của các từ không liên quan khác, và bạn có thể sẽ khiến bản thân điên rồ cố gắng vượt qua các giải pháp đơn giản hơn đã được cung cấp.

Bạn sẽ muốn có ít nhất một thuật toán ngây thơ ngây thơ (thử phần gốc của trình Porter; có sẵn, mã miễn phí trong hầu hết các ngôn ngữ) để xử lý văn bản trước tiên. Giữ văn bản được xử lý này và văn bản được xử lý trước trong hai mảng không gian phân tách riêng biệt. Đảm bảo rằng mỗi ký tự không phải chữ cái cũng có chỉ mục riêng trong mảng này. Dù danh sách các từ bạn đang lọc, cũng bắt nguồn từ chúng.

Bước tiếp theo sẽ là tìm các chỉ mục mảng khớp với danh sách các từ 'dừng' có dấu của bạn. Loại bỏ những người khỏi mảng chưa được xử lý, và sau đó tham gia lại vào không gian.

Điều này chỉ phức tạp hơn một chút, nhưng sẽ đáng tin cậy hơn nhiều. Nếu bạn có bất kỳ nghi ngờ nào về giá trị của một cách tiếp cận định hướng NLP hơn, bạn có thể muốn thực hiện một số nghiên cứu về clbuttic mistakes.

11

Nếu bạn muốn kết hợp bất cứ điều gì sau khi một từ dừng lại một không chỉ ở đầu dòng bạn có thể sử dụng: \bstop.*\b - word followed by line

Word till the end of string

Hoặc nếu bạn muốn kết hợp các từ trong chuỗi sử dụng \bstop[a-zA-Z]* - only the words starting with stop

Only the words starting with stop

Hoặc khi bắt đầu dòng với điểm dừng ^stop[a-zA-Z]* chỉ từ - first word only
Toàn bộ dòng ^stop.*-first line of the string only

Và nếu bạn muốn kết hợp tất cả các chuỗi bắt đầu với cửa bao gồm dòng mới sử dụng: /^stop.*/s-multiline string starting with stop

0

Nếu bạn muốn từ bắt đầu với "dừng ", bạn có thể sử dụng mẫu sau. "^ stop. *"

Điều này sẽ khớp với các từ bắt đầu bằng điểm dừng, sau đó là bất kỳ thứ gì.

+1

. bạn không chỉ sử dụng '"^stop "'? –

+0

Nó phụ thuộc. Trong khi nói về cú pháp java, chúng ta có thể sử dụng đối tượng Pattern và Matcher để sử dụng phương thức regex hoặc sử dụng trực tiếp .matches() với đối tượng String. Chúng khác với kết quả như sau: 'mã' ' Chuỗi dòng = "dừng"; ' ' Chuỗi mẫu = "^ dừng"; ' ' Mẫu r = Pattern.compile (mẫu); ' ' Matcher m = r.matcher (dòng); ' ' System.out.println (m.find()); // in true' 'System.out.println (line.matches (pattern)); // prints false' –

+0

Điều này chỉ khớp với từ ở đầu dòng. Nếu các từ bắt đầu bằng "stop" nằm ở giữa dòng hoặc ở cuối dòng, regex này sẽ không khớp. @StephenRauch nếu bạn bỏ qua [a-z] * bạn sẽ không nhận được bất kỳ từ nào như "dừng" toàn bộ. Trong trường hợp "dừng" bạn nhận được "dừng" và "ping" sẽ bị thiếu. –

1

Giống như @SharadHolani cho biết. Tên này sẽ không khớp với mọi từ bắt đầu bằng "stop"

. Chỉ khi nó ở đầu dòng như ", dừng lại". @Waxo đã đưa ra câu trả lời đúng:

Đây là một hơi tốt hơn, nếu bạn muốn để phù hợp với bất kỳ từ nào bắt đầu với "dừng" và chứa gì, nhưng chữ từ A đến Z.

\bstop[a-zA-Z]*\b 

này sẽ phù hợp với tất cả

dừng (1)

dừng ngẫu nhiên (2)

dừng (3)

muốn để dừng (4)

xin dừng (5)

Nhưng

/^stop[a-zA-Z]*/ 

sẽ chỉ phù hợp (1) cho đến khi (3), nhưng không (4) & (5)

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