Hướng dẫn php regex repeating pattern - mô hình lặp lại php regex

Chỉ để giải trí đây là một regex sẽ hoạt động với một preg_match_all:

'%[?:Filed under:\s*+|\G][^]*+\K[^]*%`

Hoặc, ở một định dạng dễ đọc hơn:

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'

\G khớp với vị trí mà lần thử trận tiếp theo sẽ bắt đầu, thường là vị trí mà trận đấu thành công trước đó kết thúc [nhưng nếu trận đấu trước đó có độ dài bằng không, nó sẽ vượt qua một lần nữa]. Điều đó có nghĩa là regex sẽ không khớp với một chuỗi con bắt đầu với cho đến khi nó phù hợp với nó bắt đầu với Filed under: ít nhất một lần.

Sau khi chuỗi sentinel hoặc thẻ kết thúc đã được khớp, [^]*+ tiêu thụ mọi thứ lên đến và bao gồm thẻ bắt đầu tiếp theo. Sau đó, \K giả mạo vị trí bắt đầu để trận đấu [nếu có] dường như bắt đầu sau thẻ

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
0 [nó giống như một cái nhìn tích cực, nhưng linh hoạt hơn]. Cuối cùng,
'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
1 khớp với nội dung của thẻ và đưa vị trí khớp lên thẻ cuối để \G có thể khớp.

Nhưng, như tôi đã nói, đây chỉ là để giải trí. Nếu bạn không phải thực hiện công việc trong một regex, bạn nên tắt với cách tiếp cận nhiều bước như cách sử dụng @codaddict được sử dụng; Nó dễ đọc hơn, linh hoạt hơn và dễ bảo trì hơn.

\K Tham khảo \G Tham khảo
\G reference

EDIT: Mặc dù các tài liệu tham khảo mà tôi đã đưa ra dành cho các tài liệu Perl, các tính năng này cũng được PHP hỗ trợ-hoặc, chính xác hơn là bởi PCRE LIB. Tôi nghĩ rằng các tài liệu Perl tốt hơn một chút, nhưng bạn cũng có thể đọc về những thứ này trong hướng dẫn PCRE.

2 năm trước

[Php 4, Php 5, Php 7, Php 8]Perform a regular expression search and replace

preg_replace - thực hiện tìm kiếm biểu thức thông thường và thay thế

Sự mô tả[
    string|array

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
5,
    string|array
'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
6
,
    string|array
'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
7
,
    int
'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
8 = -1
,
    int
'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
9 =
The bear black slow jumps over the lazy dog.
0

]: string|array|null

preg_replace [& nbsp; & nbsp; & nbsp; & nbsp; chuỗi | mảng ____ 15, & nbsp; & nbsp; & nbsp;
'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
8 = -1, & nbsp; & nbsp; & nbsp; & nbsp; int
'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
9 =
The bear black slow jumps over the lazy dog.
0]: chuỗi | mảng | null

Thông số

The bear black slow jumps over the lazy dog.
1

Các mẫu để tìm kiếm. Nó có thể là một chuỗi hoặc một mảng có chuỗi.

Một số sửa đổi PCRE cũng có sẵn.

The bear black slow jumps over the lazy dog.
2

Chuỗi hoặc một mảng có chuỗi để thay thế. Nếu tham số này là một chuỗi và tham số

The bear black slow jumps over the lazy dog.
1 là một mảng, tất cả các mẫu sẽ được thay thế bằng chuỗi đó. Nếu cả hai tham số
The bear black slow jumps over the lazy dog.
1 và
The bear black slow jumps over the lazy dog.
2 đều là mảng, mỗi
The bear black slow jumps over the lazy dog.
1 sẽ được thay thế bằng đối tác
The bear black slow jumps over the lazy dog.
2. Nếu có ít phần tử hơn trong mảng
The bear black slow jumps over the lazy dog.
2 so với mảng
The bear black slow jumps over the lazy dog.
1, bất kỳ
The bear black slow jumps over the lazy dog.
1 nào sẽ được thay thế bằng một chuỗi trống.n'th parenthesized pattern. n can be from 0 to 99, and
The slow black bear jumps over the lazy dog.
4 or
The slow black bear jumps over the lazy dog.
5 refers to the text matched by the whole pattern. Opening parentheses are counted from left to right [starting from 1] to obtain the number of the capturing subpattern. Note that backslashes in string literals may require to be escaped.

The bear black slow jumps over the lazy dog.
2 có thể chứa các tài liệu tham khảo về mẫu
The slow black bear jumps over the lazy dog.
2 hoặc
The slow black bear jumps over the lazy dog.
3, với dạng sau là mẫu ưa thích. Mỗi tài liệu tham khảo như vậy sẽ được thay thế bằng văn bản được chụp bởi mẫu dấu ngoặc đơn. n có thể từ 0 đến 99 và
The slow black bear jumps over the lazy dog.
4 hoặc
The slow black bear jumps over the lazy dog.
5 đề cập đến văn bản phù hợp với toàn bộ mẫu. Dấu ngoặc đơn được tính từ trái sang phải [bắt đầu từ 1] để có được số lượng tiểu mẫu bị bắt. Lưu ý rằng các dấu gạch chéo ngược trong các chuỗi chữ có thể yêu cầu phải được thoát ra.preg_replace[] since it does not know whether you want the
The slow black bear jumps over the lazy dog.
6 backreference followed by a literal
The slow black bear jumps over the lazy dog.
9, or the
The slow black bear jumps over the lazy dog.
7 backreference followed by nothing. In this case the solution is to use preg_match_all1. This creates an isolated preg_match_all2 backreference, leaving the
The slow black bear jumps over the lazy dog.
9 as a literal.

Khi làm việc với một mẫu thay thế trong đó một bản sao lưu ngay lập tức được theo sau bởi một số khác [tức là: đặt một số theo nghĩa đen ngay sau một mẫu phù hợp], bạn không thể sử dụng ký hiệu

The slow black bear jumps over the lazy dog.
6 quen thuộc cho bản sao lưu của bạn.
The slow black bear jumps over the lazy dog.
7, ví dụ, sẽ nhầm lẫn preg_replace [] vì nó không biết liệu bạn có muốn bản sao lưu
The slow black bear jumps over the lazy dog.
6 theo nghĩa đen
The slow black bear jumps over the lazy dog.
9 hay bản sao lưu
The slow black bear jumps over the lazy dog.
7 theo sau là không có gì. Trong trường hợp này, giải pháp là sử dụng preg_match_all1. Điều này tạo ra một bản sao lưu preg_match_all2 bị cô lập, để lại
The slow black bear jumps over the lazy dog.
9 như một nghĩa đen.

Khi sử dụng công cụ sửa đổi preg_match_all4 không dùng, hàm này thoát khỏi một số ký tự [cụ thể là preg_match_all5, preg_match_all6, preg_match_all7 và NULL] trong các chuỗi thay thế các bản sao lưu. Điều này được thực hiện để đảm bảo rằng không có lỗi cú pháp nào phát sinh từ việc sử dụng bản sao lại với trích dẫn đơn hoặc kép [ví dụ: preg_match_all8]. Hãy chắc chắn rằng bạn biết về cú pháp chuỗi của PHP để biết chính xác chuỗi được giải thích sẽ trông như thế nào.

preg_match_all9

Chuỗi hoặc một mảng có chuỗi để tìm kiếm và thay thế.

Nếu preg_match_all9 là một mảng, thì việc tìm kiếm và thay thế được thực hiện trên mọi mục nhập của preg_match_all9 và giá trị trả về cũng là một mảng.

Nếu mảng preg_match_all9 là kết hợp, các khóa sẽ được bảo tồn trong giá trị trả về.

\G3

Sự thay thế tối đa có thể cho mỗi mẫu trong mỗi chuỗi preg_match_all9. Mặc định là \G5 [không có giới hạn].

\G6

Nếu được chỉ định, biến này sẽ được lấp đầy với số lượng thay thế được thực hiện.

Trả về giá trị returns an array if the preg_match_all9 parameter is an array, or a string otherwise.

preg_replace [] trả về một mảng nếu tham số preg_match_all9 là một mảng hoặc một chuỗi khác.

The bear black slow jumps over the lazy dog.
0 if an error occurred.

Errors/Exceptions

Nếu các trận đấu được tìm thấy, preg_match_all9 mới sẽ được trả về, nếu không preg_match_all9 sẽ được trả về không thay đổi hoặc

The bear black slow jumps over the lazy dog.
0 nếu xảy ra lỗi.1 is emitted in this case.

Sử dụng công cụ sửa đổi "\ e" là một lỗi; Một 1 được phát ra trong trường hợp này.1 is emitted.

Nếu mẫu regex được truyền không biên dịch cho một regex hợp lệ, một 1 được phát ra.

Ví dụ

3

Ví dụ số 1 sử dụng các bản sao lưu theo sau là chữ số

Ví dụ trên sẽ xuất ra:preg_replace[]

4

Ví dụ số 1 sử dụng các bản sao lưu theo sau là chữ số

The bear black slow jumps over the lazy dog.

Ví dụ trên sẽ xuất ra:

5

Ví dụ số 1 sử dụng các bản sao lưu theo sau là chữ số

The slow black bear jumps over the lazy dog.

Ví dụ trên sẽ xuất ra:

6

Ví dụ số 1 sử dụng các bản sao lưu theo sau là chữ số

Ví dụ trên sẽ xuất ra:

Ví dụ #2 Sử dụng các mảng được lập chỉ mục với preg_replace []

7

Bằng các mẫu và thay thế KSORTING, chúng ta nên có được những gì chúng ta muốn.

9

Filed under:0

Filed under:1

Ví dụ trên sẽ xuất ra:

Ghi chú

Ghi chú::

Khi sử dụng các mảng có

The bear black slow jumps over the lazy dog.
1 và
The bear black slow jumps over the lazy dog.
2, các khóa được xử lý theo thứ tự chúng xuất hiện trong mảng. Điều này không nhất thiết giống như thứ tự chỉ số số. Nếu bạn sử dụng các chỉ mục để xác định
The bear black slow jumps over the lazy dog.
1 nên được thay thế bằng cách nào
The bear black slow jumps over the lazy dog.
2, bạn nên thực hiện ksort [] trên mỗi mảng trước khi gọi preg_replace [].ksort[] on each array prior to calling preg_replace[].

Ghi chú::

Khi sử dụng các mảng có

The bear black slow jumps over the lazy dog.
1 và
The bear black slow jumps over the lazy dog.
2, các khóa được xử lý theo thứ tự chúng xuất hiện trong mảng. Điều này không nhất thiết giống như thứ tự chỉ số số. Nếu bạn sử dụng các chỉ mục để xác định
The bear black slow jumps over the lazy dog.
1 nên được thay thế bằng cách nào
The bear black slow jumps over the lazy dog.
2, bạn nên thực hiện ksort [] trên mỗi mảng trước khi gọi preg_replace [].

[^]*+2

Khi cả
The bear black slow jumps over the lazy dog.
1 và
The bear black slow jumps over the lazy dog.
2 đều là mảng, các quy tắc phù hợp sẽ hoạt động tuần tự. Đó là, cặp ________ 21/________ 22 thứ hai sẽ hoạt động trên chuỗi kết quả từ cặp ________ 21/________ 22 đầu tiên, không phải chuỗi gốc. Nếu bạn muốn mô phỏng các thay thế hoạt động song song, chẳng hạn như hoán đổi hai giá trị, thay thế một mẫu bằng trình giữ chỗ trung gian, sau đó trong một cặp sau đó thay thế trình giữ chỗ trung gian đó bằng cách thay thế mong muốn.

  • Xem thêm
  • Mẫu pcre
  • preg_quote [] - Trích dẫn các ký tự biểu thức chính quy
  • preg_filter [] - Thực hiện tìm kiếm biểu thức thông thường và thay thế
  • preg_match [] - Thực hiện phù hợp với biểu thức thông thường
  • preg_replace_callback [] - Thực hiện tìm kiếm biểu thức thông thường và thay thế bằng cách sử dụng gọi lại
  • preg_split [] - Chuỗi phân chia theo biểu thức thông thường

preg_last_error [] - Trả về mã lỗi của thực thi pcre regex cuối cùng

Arkani tại iol dot pt ¶

[^]*+3

[^]*+4

[^]*+5

[^]*+6

[^]*+7

13 năm trước

tôi tại perochak dot com ¶

[^]*+8

[^]*+9

\K0

[^]*+7

11 năm trước

PHP-comments-remove dot me at dotancohen dot com ¶

\K2

\K3

\K4

\K5

14 năm trước

Nik tại Rolls Dot CC ¶

\K6

\K7

[^]*+7

9 năm trước

razvan_bc tại yahoo dot com ¶

\K9

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
00

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
01

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
02

16 ngày trước

sternkinder tại gmail dot com ¶

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
03

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
04

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
05

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
06

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
07

15 năm trước

sternkinder tại gmail dot com ¶

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
08

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
09

[^]*+7

15 năm trước

Ismith tại Nojunk Dot Motorola Dot Com ¶

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
11

bublifuk tại mailinator dot com

4 năm trước

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
12

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
13

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
14

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
15

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
16

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
17

'%[?:
      Filed under:   # your sentinel string
    |                
      \G             # NEXT MATCH POSITION
                 # an end tag
  ]
  [^]*+          # some non-tag stuff     
         # an opening tag
  \K               # RESET MATCH START
  [^]+           # the tag's contents
%x'
18

Bài Viết Liên Quan

Chủ Đề