Hướng dẫn php replace string between brackets - php thay thế chuỗi giữa các dấu ngoặc

[Câu trả lời cũ]

Nếu cần, mô hình có thể đối phó với dấu ngoặc đơn và dấu ngoặc vuông hoặc xoăn:

$pattern = '~(?:(\()|(\[)|(\{))(?(1)(?>[^()]++|(?R))*\))(?(2)(?>[^][]++|(?R))*\])(?(3)(?>[^{}]++|(?R))*\})~';

$result = preg_replace($pattern, '', $str);

[EDIT]

Một mô hình chỉ loại bỏ các bộ phận cân bằng tốt và tính đến ba loại dấu ngoặc:

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';

Mẫu này hoạt động tốt nhưng kiểm tra loại bổ sung hơi quá mức cần thiết khi mục tiêu chỉ là để loại bỏ các bộ phận khung trong một chuỗi. Tuy nhiên, nó có thể được sử dụng như một tiểu trình để kiểm tra xem tất cả các loại giá đỡ có được cân bằng trong một chuỗi không.


Một mô hình chỉ loại bỏ các phần cân bằng tốt, nhưng lần này, chỉ có loại giá đỡ ngoài cùng được tính đến, các loại giá đỡ khác bên trong mới bị bỏ qua (cùng một hành vi so với câu trả lời cũ nhưng hiệu quả hơn và không có các bài kiểm tra có điều kiện vô dụng):

$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';

(Php 4, Php 5, Php 7, Php 8)

preg_replace - thực hiện tìm kiếm biểu thức thông thường và thay thếPerform a regular expression search and replace

Sự mô tả

preg_replace (& nbsp; & nbsp; & nbsp; & nbsp; chuỗi | mảng ________ 5, & nbsp; & nbsp; & nbsp; $limit = -1, & nbsp; & nbsp; & nbsp; & nbsp; int &$count =

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
0): chuỗi | mảng | null(
    string|array $pattern,
    string|array $replacement,
    string|array $subject,
    int $limit = -1,
    int &$count =
$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
0

): string|array|null

Thông số

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
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.

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
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ố

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
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ố
$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
1 và
$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
2 đều là mảng, mỗi
$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
1 sẽ được thay thế bằng đối tác
$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
2. Nếu có ít phần tử hơn trong mảng
$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
2 so với mảng
$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
1, bất kỳ
$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
1 nào sẽ được thay thế bằng một chuỗi trống.

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
2 có thể chứa các tài liệu tham khảo về mẫu
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
2 hoặc
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
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à
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
4 hoặc
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
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.n'th parenthesized pattern. n can be from 0 to 99, and
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
4 or
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
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.

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

$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
6 quen thuộc cho bản sao lưu của bạn.
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
7, ví dụ, sẽ nhầm lẫn preg_replace () vì nó không biết bạn có muốn bản sao lưu
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
6 theo nghĩa đen
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
9 hay bản sao lưu
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
7 theo sau là không có gì. Trong trường hợp này, giải pháp là sử dụng
The bear black slow jumps over the lazy dog.
1. Điều này tạo ra một bản sao lưu
The bear black slow jumps over the lazy dog.
2 bị cô lập, để lại
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
9 như một nghĩa đen.preg_replace() since it does not know whether you want the
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
6 backreference followed by a literal
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
9, or the
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
7 backreference followed by nothing. In this case the solution is to use
The bear black slow jumps over the lazy dog.
1. This creates an isolated
The bear black slow jumps over the lazy dog.
2 backreference, leaving the
$pattern = '~
    \[ ( [^][]*+ (?: \[ (?1) ] [^][]* )*+ )  ]
  |
    \( ( [^)(]*+ (?: \( (?2) ] [^)(]* )*+ ) \)
  |
     { ( [^}{]*+ (?:  { (?3) } [^}{]* )*+ )  }
~xS';
9 as a literal.

Khi sử dụng công cụ sửa đổi

The bear black slow jumps over the lazy dog.
4 không dùng, hàm này thoát khỏi một số ký tự (cụ thể là
The bear black slow jumps over the lazy dog.
5,
The bear black slow jumps over the lazy dog.
6,
The bear black slow jumps over the lazy dog.
7 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 các trích dẫn đơn hoặc kép (ví dụ:
The bear black slow jumps over the lazy dog.
8). 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.

The bear black slow jumps over the lazy dog.
9

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

Nếu

The bear black slow jumps over the lazy dog.
9 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
The bear black slow jumps over the lazy dog.
9 và giá trị trả về cũng là một mảng.

Nếu mảng

The bear black slow jumps over the lazy dog.
9 là kết hợp, các khóa sẽ được bảo tồn trong giá trị trả về.

The slow black bear jumps over the lazy dog.
3

Sự thay thế tối đa có thể cho mỗi mẫu trong mỗi chuỗi

The bear black slow jumps over the lazy dog.
9. Mặc định là
The slow black bear jumps over the lazy dog.
5 (không có giới hạn).

The slow black bear jumps over the lazy dog.
6

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ị

preg_replace () trả về một mảng nếu tham số

The bear black slow jumps over the lazy dog.
9 là một mảng hoặc một chuỗi khác. returns an array if the
The bear black slow jumps over the lazy dog.
9 parameter is an array, or a string otherwise.

Nếu các trận đấu được tìm thấy,

The bear black slow jumps over the lazy dog.
9 mới sẽ được trả về, nếu không
The bear black slow jumps over the lazy dog.
9 sẽ được trả về không thay đổi hoặc
$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
0 nếu xảy ra lỗi.
$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
0
if an error occurred.

Errors/Exceptions

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

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

Ví dụ

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

$pattern3

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 ()preg_replace()

$pattern4

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

The bear black slow jumps over the lazy dog.

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

$pattern5

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

The slow black bear jumps over the lazy dog.

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

$pattern6

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 ()

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.

$pattern7

Ví dụ #3 thay thế một số giá trị

$pattern9

$replacement0

$replacement1

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 ()

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.:

Ví dụ #3 thay thế một số giá trịksort() on each array prior to calling preg_replace().

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.:

Ví dụ #3 thay thế một số giá trị

$subject2

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 ¶

13 năm trước

$subject3

$subject4

$subject5

$subject6

$subject7

tôi tại perochak dot com ¶

11 năm trước

$subject8

$subject9

$limit0

$subject7

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

14 năm trước

$limit2

$limit3

$limit4

$limit5

Nik tại Rolls Dot CC ¶

9 năm trước

$limit6

$limit7

$subject7

razvan_bc tại yahoo dot com ¶

25 ngày trước

$limit9

&$count0

&$count1

&$count2

sternkinder tại gmail dot com ¶

15 năm trước

&$count3

&$count4

&$count5

&$count6

&$count7

Ismith tại Nojunk Dot Motorola Dot Com ¶

15 năm trước

&$count8

&$count9

$subject7

Ismith tại Nojunk Dot Motorola Dot Com ¶

bublifuk tại mailinator dot com

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
01

4 năm trước

Thư tại Johanvanderwe Dot NL ¶

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
02

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
03

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
04

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
05

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
06

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
07

$pattern = '~
    \[ [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  ]
  |
    \( [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+ \)
  |
    {  [^][}{)(]*+ (?: (?R) [^][}{)(]* )*+  }
~xS';
08