Javascript có thay thế không?

Biểu thức chính quy [regex] xác định mẫu tìm kiếm cho chuỗi. Mẫu tìm kiếm có thể là bất kỳ thứ gì từ ký tự đơn giản, chuỗi cố định hoặc biểu thức phức tạp chứa các ký tự đặc biệt mô tả mẫu

Một biểu thức chính quy có thể được sử dụng để tìm kiếm, chỉnh sửa và thao tác với văn bản, quá trình này được gọi là. Biểu thức chính quy được áp dụng cho văn bản/chuỗi

Regex được áp dụng trên văn bản từ trái sang phải. Khi một ký tự nguồn đã được sử dụng trong một trận đấu, nó không thể được sử dụng lại. Ví dụ: regex

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
8 sẽ chỉ khớp với ababababa hai lần [aba_aba__]

1. 2. Ví dụ về biểu thức chính quy

Một ví dụ đơn giản cho một biểu thức chính quy là một chuỗi [chữ]. Ví dụ: regex Hello World khớp với chuỗi "Hello World".

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
9 [dấu chấm] là một ví dụ khác cho biểu thức chính quy. Một dấu chấm khớp với bất kỳ ký tự đơn nào;

Các bảng sau đây liệt kê một số biểu thức chính quy và mô tả chúng sẽ khớp với mẫu nào

Bảng 1. Ví dụ RegexRegexMatch

đây là văn bản

Khớp chính xác "đây là văn bản"

đây\s+là\s+văn bản

So khớp với từ "this" theo sau là một hoặc nhiều ký tự khoảng trắng theo sau là từ "is" theo sau là một hoặc nhiều ký tự khoảng trắng theo sau là từ "văn bản"

^\d+[\. \d+]?

^ xác định rằng mẫu phải bắt đầu ở đầu một dòng mới. \d+ khớp với một hoặc nhiều chữ số. Các ? . \. diêm ". ", dấu ngoặc đơn được sử dụng để nhóm. Các trận đấu ví dụ "5", "1. 5" và "2. 21"

2. điều kiện tiên quyết

Hướng dẫn sau đây giả định rằng bạn đã có kiến ​​thức cơ bản về ngôn ngữ lập trình Java

Một số ví dụ sau sử dụng Hướng dẫn JUnit để xác thực kết quả. Bạn sẽ có thể điều chỉnh chúng trong trường hợp nếu bạn không muốn sử dụng JUnit

3. Quy tắc viết biểu thức chính quy

Mô tả sau đây là tổng quan về các ký tự meta có sẵn có thể được sử dụng trong các biểu thức chính quy. Chương này được coi là một tài liệu tham khảo cho các yếu tố regex khác nhau

3. 1. Các ký hiệu khớp phổ biến

Mô tả biểu thức chính quy

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
9

Khớp với bất kỳ ký tự nào

a[?!b]
1

Tìm regex phải khớp ở đầu dòng

a[?!b]
2

Tìm regex phải khớp ở cuối dòng

a[?!b]
3

Đặt nét, có thể ghép chữ a hoặc b hoặc c

a[?!b]
4

Đặt định nghĩa, có thể khớp với a hoặc b hoặc c theo sau là v hoặc z

a[?!b]
5

Khi dấu mũ xuất hiện dưới dạng ký tự đầu tiên bên trong dấu ngoặc vuông, nó phủ định mẫu. Mẫu này khớp với bất kỳ ký tự nào ngoại trừ a hoặc b hoặc c

a[?!b]
6

Các dãy. khớp với một chữ cái giữa a và d và các số từ 1 đến 7, nhưng không khớp với d1

a[?!b]
7

Tìm X hoặc Z

a[?!b]
8

Tìm X ngay sau Z

a[?!b]
9

Kiểm tra nếu một kết thúc dòng sau

3. 2. Ký tự meta

Các ký tự meta sau đây có ý nghĩa được xác định trước và làm cho một số mẫu phổ biến dễ sử dụng hơn. Ví dụ: bạn có thể sử dụng

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
20 làm định nghĩa đơn giản cho
// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
21

Mô tả biểu thức chính quy

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
20

Bất kỳ chữ số nào, viết tắt của

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
23

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
24

Một chữ số không, viết tắt của

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
25

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
26

Một ký tự khoảng trắng, viết tắt của

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
27

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
28

Một ký tự không phải khoảng trắng, viết tắt của

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
29

Một ký tự từ, viết tắt của

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
20

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
21

Một ký tự không phải từ

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
22

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
23

Một số ký tự không phải khoảng trắng

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
24

Khớp với một ranh giới từ trong đó một ký tự từ là

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
25

Các ký tự meta này có cùng chữ cái đầu tiên giống như biểu diễn của chúng, e. g. , chữ số, khoảng cách, từ và ranh giới. Ký hiệu chữ hoa xác định ngược lại

3. 3. định lượng

Một bộ định lượng xác định tần suất xuất hiện của một phần tử. Các ký hiệu ?, *, + và {} là các từ hạn định

Biểu thức chính quyMô tảVí dụ

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
26

Xảy ra không hoặc nhiều lần, là viết tắt của

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
27

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
28 finds no or several letter X,
// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
29 finds any character sequence

a[?!b]
20

Xảy ra một hoặc nhiều lần, viết tắt của

a[?!b]
21

a[?!b]
22- Tìm được một hoặc nhiều chữ X

a[?!b]
23

Xảy ra không hoặc một lần,

a[?!b]
23 là viết tắt của
a[?!b]
25

a[?!b]
26 không tìm thấy hoặc tìm thấy chính xác một chữ cái X

a[?!b]
27

Xuất hiện X số lần,

a[?!b]
28 mô tả thứ tự của tự do trước

a[?!b]
29 tìm kiếm ba chữ số,
a[?!b]
20 cho bất kỳ chuỗi ký tự nào có độ dài 10

a[?!b]
21

Xảy ra giữa X và Y lần,

a[?!b]
22 có nghĩa là
// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
20 phải xảy ra ít nhất một lần và tối đa là bốn lần

a[?!b]
24

a[?!b]
23 sau khi một bộ định lượng làm cho nó trở thành một bộ định lượng miễn cưỡng. Nó cố gắng tìm trận đấu nhỏ nhất. Điều này làm cho biểu thức chính quy dừng lại ở trận đấu đầu tiên

3. 4. Nhóm và tham khảo ngược

Bạn có thể nhóm các phần của biểu thức chính quy của mình. Trong mẫu của bạn, bạn nhóm các phần tử có dấu ngoặc tròn, e. g. ,

a[?!b]
26. Điều này cho phép bạn chỉ định một toán tử lặp lại cho một nhóm hoàn chỉnh

Ngoài ra, các nhóm này cũng tạo một tham chiếu ngược đến một phần của biểu thức chính quy. Điều này nắm bắt nhóm. Tham chiếu ngược lưu trữ một phần của

a[?!b]
27 phù hợp với nhóm. Điều này cho phép bạn sử dụng phần này trong việc thay thế

Thông qua

a[?!b]
9, bạn có thể tham khảo một nhóm.
a[?!b]
29 là nhóm đầu tiên,
a[?!b]
20 là nhóm thứ hai, v.v.

Ví dụ: giả sử bạn muốn thay thế tất cả khoảng trắng giữa một chữ cái theo sau là dấu chấm hoặc dấu phẩy. Điều này có nghĩa là điểm hoặc dấu phẩy là một phần của mẫu. Tuy nhiên, nó nên được bao gồm trong kết quả

a[?!b]
3

Ví dụ này trích xuất văn bản giữa thẻ tiêu đề

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];

3. 5. Cái nhìn tiêu cực về phía trước

Cái nhìn tiêu cực về phía trước cung cấp khả năng loại trừ một mẫu. Với điều này, bạn có thể nói rằng một chuỗi không được theo sau bởi một chuỗi khác

Cái nhìn tiêu cực về phía trước được xác định thông qua

a[?!b]
21. Ví dụ: phần sau sẽ khớp với "a" nếu "a" không được theo sau bởi "b"

a[?!b]

3. 6. Chỉ định các chế độ bên trong biểu thức chính quy

Bạn có thể thêm các công cụ sửa đổi chế độ vào đầu biểu thức chính quy. Để chỉ định nhiều chế độ, chỉ cần đặt chúng lại với nhau như trong [?ismx]

  • [?i] làm cho trường hợp regex không nhạy cảm

  • [?s] cho "chế độ một dòng" làm cho dấu chấm khớp với tất cả các ký tự, bao gồm cả ngắt dòng

  • [?m] cho "chế độ nhiều dòng" làm cho dấu mũ và đô la khớp nhau ở đầu và cuối mỗi dòng trong chuỗi chủ đề

3. 7. Dấu gạch chéo ngược trong Java

Dấu gạch chéo ngược

a[?!b]
22 là một ký tự thoát trong Chuỗi Java. Điều đó có nghĩa là dấu gạch chéo ngược có ý nghĩa được xác định trước trong Java. Bạn phải sử dụng dấu gạch chéo ngược kép
a[?!b]
23 để xác định dấu gạch chéo ngược đơn. Nếu bạn muốn xác định
// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
29, thì bạn phải sử dụng
a[?!b]
25 trong biểu thức chính quy của mình. Nếu bạn muốn sử dụng dấu gạch chéo ngược dưới dạng chữ, bạn phải nhập
a[?!b]
26 vì
a[?!b]
22 cũng là ký tự thoát trong biểu thức chính quy

4. Sử dụng biểu thức chính quy với các phương thức String

4. 1. Các phương thức được xác định lại trên Chuỗi để xử lý các biểu thức chính quy

a[?!b]
28 trong Java có hỗ trợ tích hợp sẵn cho các biểu thức chính quy.
a[?!b]
28 có bốn phương thức tích hợp cho biểu thức chính quy. *
a[?!b]
50, *
a[?!b]
51, *
a[?!b]
52 *
a[?!b]
53

Phương thức

a[?!b]
54 KHÔNG hỗ trợ biểu thức chính quy

Các phương pháp này không được tối ưu hóa cho hiệu suất. Sau này chúng tôi sẽ sử dụng các lớp được tối ưu hóa cho hiệu suất

Phương thứcMô tả

a[?!b]
55

Đánh giá nếu

a[?!b]
56 phù hợp với
a[?!b]
57. Chỉ trả về
a[?!b]
58 nếu TOÀN chuỗi có thể khớp

a[?!b]
59

Tạo một mảng với các chuỗi con của

a[?!b]
57 được chia khi xuất hiện
a[?!b]
56.
a[?!b]
56 không được bao gồm trong kết quả

a[?!b]
83

Thay thế lần xuất hiện đầu tiên của ________ 656 bằng ________ 785

a[?!b]
86

Thay thế tất cả các lần xuất hiện của ________ 656 bằng ________ 785

Tạo cho ví dụ sau dự án Java

a[?!b]
89

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
2

4. 2. ví dụ

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
2

Nếu bạn muốn kiểm tra những ví dụ này, hãy tạo cho dự án Java

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
00

a[?!b]
2

Và một bài kiểm tra JUnit nhỏ để xác thực các ví dụ

a[?!b]
2

5. Mẫu và Matcher

Đối với các biểu thức chính quy nâng cao, các lớp

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
01 và
// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
02 được sử dụng

Trước tiên, bạn tạo một đối tượng

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
03 xác định biểu thức chính quy. Đối tượng
// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
03 này cho phép bạn tạo một đối tượng
// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
05 cho một chuỗi đã cho. Đối tượng
// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
05 này sau đó cho phép bạn thực hiện các thao tác regex trên
a[?!b]
27

a[?!b]
2

6. Ví dụ về Regex Java

Sau đây liệt kê các ví dụ điển hình cho việc sử dụng các biểu thức chính quy. Tôi hy vọng bạn tìm thấy những điểm tương đồng với các vấn đề trong thế giới thực của bạn

6. 1. Hoặc

Nhiệm vụ. Viết một biểu thức chính quy khớp với một dòng văn bản nếu dòng văn bản này chứa từ "Joe" hoặc từ "Jim" hoặc cả hai

Tạo một dự án

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
08 và lớp sau

a[?!b]
5

6. 2. Số điện thoại

Nhiệm vụ. Viết một biểu thức chính quy khớp với bất kỳ số điện thoại nào

Một số điện thoại trong ví dụ này bao gồm trong số 7 số liên tiếp hoặc trong số 3 số, khoảng trắng [màu trắng] hoặc dấu gạch ngang và sau đó là 4 số

a[?!b]
8

6. 3. Kiểm tra một phạm vi số nhất định

Ví dụ sau sẽ kiểm tra xem một văn bản có chứa một số có 3 chữ số không

Tạo dự án Java

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
09 và lớp sau

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
0

6. 4. Xây dựng trình kiểm tra liên kết

Ví dụ sau cho phép bạn trích xuất tất cả các liên kết hợp lệ từ một trang web. Nó không xem xét các liên kết bắt đầu bằng "javascript. " hoặc "mailto. "

Tạo một dự án Java gọi là de. vogella. biểu thức chính quy. liên kết web và lớp sau

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
1

6. 5. Tìm từ trùng lặp

Biểu thức chính quy sau khớp với các từ trùng lặp

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
2

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
24 là ranh giới từ và tham chiếu
// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
11 đến đối sánh đã bắt của nhóm đầu tiên, tôi. e. , từ đầu tiên

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
12 tìm các từ trùng lặp nếu chúng không bắt đầu bằng "-in"

TIỀN BOA. Thêm

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
13 để tìm kiếm trên nhiều dòng

6. 6. Tìm các phần tử bắt đầu trong một dòng mới

Biểu thức chính quy sau đây cho phép bạn tìm từ "tiêu đề", trong trường hợp từ đó bắt đầu ở một dòng mới, có thể có khoảng trắng ở đầu

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
3

6. 7. Tìm câu lệnh [Không phải Javadoc]

Đôi khi [Không phải Javadoc] được sử dụng trong mã nguồn Java để chỉ ra rằng phương thức này sẽ ghi đè một siêu phương thức. Kể từ Java 1. 6 điều này có thể được thực hiện thông qua chú thích

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
14 và có thể xóa các câu lệnh này khỏi mã của bạn. Biểu thức chính quy sau đây có thể được sử dụng để xác định các câu lệnh này

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
4

6. 7. 1. Thay thế câu lệnh bảng DocBook bằng Asciidoc

Bạn có thể thay thế các câu lệnh như sau

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
5

regex tương ứng

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
6

Mục tiêu có thể là ví dụ của bạn

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
7

7. Xử lý biểu thức chính quy trong Eclipse

IDE Eclipse cho phép thực hiện tìm kiếm và thay thế trên một tập hợp các tệp bằng cách sử dụng các biểu thức chính quy. Trong Eclipse, sử dụng phím tắt Ctrl+H để mở hộp thoại Tìm kiếm.

Chọn tab Tìm kiếm tệp và kiểm tra cờ Biểu thức chính quy trước khi nhập biểu thức chính quy của bạn. Bạn cũng có thể chỉ định loại tệp và phạm vi cho thao tác tìm kiếm và thay thế

The following screenshots demonstrate how to search for the XML tag with leading whitespace and how to remove the whitespace.

hình ảnh. biểu thức chính quyeclipse10. png[Tìm kiếm và thay thế trong Eclipse phần 1,pdfwidth=40%}

Hộp thoại kết quả cho phép bạn xem lại các thay đổi và xóa các thành phần không nên thay thế. Nếu bạn nhấn nút

// Extract the text between the two title elements
pattern = "[?i][][.+?][]";
String updated = EXAMPLE_TEST.replaceAll[pattern, "$2"];
15, các thay đổi sẽ được áp dụng

Chủ Đề