Php regex khớp giữa hai chuỗi

Bằng cách sử dụng phương pháp phát nổ, chúng tôi chuyển đổi chuỗi thành mảng bằng dấu tách "kiểm tra". vì vậy nó sẽ chuyển đổi thành mảng và bạn có thể lấy dữ liệu

$input_str = "Xdata test HD01 test 1data";

$result_array = explode['test',$input_str];

print_r[$result_array];

echo $result_array[1];

Phương pháp – 3

Bằng cách sử dụng preg_replace này và regex có thể lấy dữ liệu giữa chuỗi. Trong phương thức này, chúng tôi chuyển dữ liệu bắt đầu và kết thúc để lấy chuỗi con

Cảm ơn các bạn đã trả lời và liên kết nhưng tôi thực sự muốn hiểu cách trình hướng dẫn hoạt động hơn là trực tiếp tạo các mẫu biểu thức chính quy [mặc dù tôi cũng nên dành chút thời gian cho các liên kết trang web của bạn để hiểu rõ hơn về biểu thức chính quy]

Tôi thậm chí không thể làm cho nó trả về 'b' nếu tôi thay đổi phần đầu thành a và phần cuối thành c

Tôi thực sự muốn ai đó cho tôi biết tôi đang làm gì sai và liệu trình hướng dẫn có hoạt động với dữ liệu một dòng hay nhiều dòng không. Trang trợ giúp khá vô dụng về mặt giải thích. Ví dụ duy nhất họ có là tìm một chuỗi ký tự trên chính nó. Tôi không chắc điều đó sẽ giúp được gì, ngoài việc có thể biết nó đã xảy ra bao nhiêu lần

Trong bài viết này, tôi sẽ trình bày cách trích xuất một chuỗi từ giữa 2 chuỗi. Tôi cũng sẽ minh họa bằng một ví dụ, hiển thị các mẫu mã và giải thích

Hãy đi sâu vào…

Chuỗi ví dụ

Dưới đây là chuỗi ví dụ dùng để minh họa trong bài viết này

$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";

Tôi có một văn bản như trên và tôi muốn trích xuất tất cả các chuỗi được tìm thấy giữa các ký tự “

$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";
2” và “
$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";
3” và sau đó sử dụng các chuỗi được trích xuất này trong một vòng lặp

Dưới đây là mã và giải thích về mã được sử dụng để trích xuất các chuỗi

$pattern = '/text = [.+]\s*\}/';
preg_match_all[$pattern, $string, $matches];

foreach[$matches[1] as $match] {
  echo $match;
}

Giải trình

$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";
4. Tìm tất cả các kết quả khớp của mẫu đã chỉ định trong chuỗi đang được tìm kiếm. Lưu ý rằng điều này khác với
$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";
5 ngừng tìm kiếm các kết quả phù hợp khác sau khi tìm thấy kết quả phù hợp

$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";
6“. Mẫu phụ này khớp chính xác với “
$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";
2” ký tự trong chuỗi đang được tìm kiếm

$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";
8. “
$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";
9” khớp với một hoặc nhiều lần xuất hiện của bất kỳ ký tự đơn nào ngoại trừ một dòng mới
$pattern = '/text = [.+]\s*\}/';
preg_match_all[$pattern, $string, $matches];

foreach[$matches[1] as $match] {
  echo $match;
}
0. Đặt cái này trong ngoặc đơn như trong
$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";
8, làm cho bất kỳ chuỗi nào khớp với mẫu con được đặt trong ngoặc đơn đầu tiên này sẽ được thêm vào mảng
$pattern = '/text = [.+]\s*\}/';
preg_match_all[$pattern, $string, $matches];

foreach[$matches[1] as $match] {
  echo $match;
}
2. Trong trường hợp của chúng tôi, đây là chuỗi chúng tôi muốn trích xuất

$pattern = '/text = [.+]\s*\}/';
preg_match_all[$pattern, $string, $matches];

foreach[$matches[1] as $match] {
  echo $match;
}
3. Đầu tiên,
$pattern = '/text = [.+]\s*\}/';
preg_match_all[$pattern, $string, $matches];

foreach[$matches[1] as $match] {
  echo $match;
}
4 khớp với bất kỳ ký tự khoảng trắng nào [dấu cách, tab, xuống dòng hoặc ký tự xuống dòng]. Vì vậy,
$pattern = '/text = [.+]\s*\}/';
preg_match_all[$pattern, $string, $matches];

foreach[$matches[1] as $match] {
  echo $match;
}
5 khớp với 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự khoảng trắng nào

$pattern = '/text = [.+]\s*\}/';
preg_match_all[$pattern, $string, $matches];

foreach[$matches[1] as $match] {
  echo $match;
}
6. Điều này khớp với ký tự “
$pattern = '/text = [.+]\s*\}/';
preg_match_all[$pattern, $string, $matches];

foreach[$matches[1] as $match] {
  echo $match;
}
7”. Ký tự “
$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";
3” có ý nghĩa đặc biệt trong Biểu thức chính quy. Đó là lý do tại sao nó được thoát bằng cách sử dụng ký tự “
$pattern = '/text = [.+]\s*\}/';
preg_match_all[$pattern, $string, $matches];

foreach[$matches[1] as $match] {
  echo $match;
}
9” để chúng tôi có thể khớp chính xác ký tự “
$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";
3”

$pattern = '/text = [.+]\s*\}/';
preg_match_all[$pattern, $string, $matches];

foreach[$matches[1] as $match] {
  echo $match;
}
2. Đây là một mảng các chuỗi khớp với mẫu đầu tiên trong dấu ngoặc đơn “
$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";
22“. Nếu mẫu mà chúng ta sử dụng trong ví dụ trên có một dấu ngoặc đơn khác sau mẫu đầu tiên, các chuỗi khớp với mẫu này trong dấu ngoặc đơn thứ hai sẽ được đưa vào mảng
$string = "10 = OPTION
	10 {
		text = Text to extract 1
	}
	20 = OPTION
	20 {
		text = Text to extract 2
	}
	30 = OPTION
	30 {
		text = Text to extract 3
	}
	40 = OPTION
	40 {
		text = Text to extract 4
	}";
23, v.v.

Để cải thiện kiến ​​thức RegExp cơ bản của bạn, hãy xem bài viết tuyệt vời này

Kết quả từ mã ví dụ thử nghiệm

Thử nghiệm đã được thực hiện trên

Dưới đây là ảnh chụp màn hình hiển thị kết quả kiểm tra mẫu ở trên với chuỗi ví dụ ở trên

Chủ Đề