Tôi đang cố gắng viết một regex để khớp với một chuỗi chứa tối đa 2 số và không chứa các dấu hiệu cụ thể như
$text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
2 hoặc $text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
3 chẳng hạn:my name is jojo -> catch all
my name is jojo i'm 20 years old -> catch all
my name is jojo i'm 20 years old and 6 miles away -> catch all
blablabla 40% my name is jojo -> should only catch "my name is jojo"
Thực tế là tôi không thể quản lý để sử dụng
$text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
4 kết hợp với $text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
5 trong biểu thức regex: Bây giờ tôi đang cố gắng làm điều gì đó như thế này nhưng nó không hoạt động ...:preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
Cảm ơn rất nhiều về sự trợ giúp của bạn. ạ
Ben
8.8647 Huy hiệu vàng42 Huy hiệu bạc78 Huy hiệu đồng7 gold badges42 silver badges78 bronze badges
Hỏi ngày 16 tháng 12 năm 2015 lúc 11:07Dec 16, 2015 at 11:07
9
Bây giờ tôi đang cố gắng làm một cái gì đó như thế này nhưng nó không hoạt động ...:
preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
Bạn không xa giải pháp. So sánh:
$strings = array["my name is jojo",
"my name is jojo i'm 20 years old",
"my name is jojo i'm 20 years old and 6 miles away",
"blablabla 40% my name is jojo"];
foreach [$strings as $string]
{
preg_match_all["/[[^0-9=%\s]\s?]{10,}[[0-9,.]+[^0-9=%]*]{0,2}/", $string, $match];
print_r[$match[0]];
}
6 Điều này phù hợp với ít nhất 10 ký tự không phải là không-nor -____ ____ 67-nor không gian mà mỗi ký tự có thể được theo sau bởi không gian.$text = 'ignore everything except this [text]'; preg_match['#\[[.*?]\]#', $text, $match]; print $match[1];
8 Điều này phù hợp với tối đa 2 số trong đó mỗi số có thể được theo sau bởi các ký tự được phép khác.$text = 'ignore everything except this [text]'; preg_match['#\[[.*?]\]#', $text, $match]; print $match[1];
Đã trả lời ngày 3 tháng 11 năm 2017 lúc 15:03Nov 3, 2017 at 15:03
ArmaliarmaliArmali
Phim thương hiệu vàng 17K1354 Huy hiệu bạc157 Huy hiệu đồng13 gold badges54 silver badges157 bronze badges
92
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.Learn more.
Learn more.
Cách tốt nhất/hiệu quả nhất để trích xuất văn bản giữa dấu ngoặc đơn là gì? Nói rằng tôi muốn lấy chuỗi "văn bản" từ chuỗi "Bỏ qua mọi thứ ngoại trừ [văn bản] này" theo cách hiệu quả nhất có thể.
Cho đến nay, điều tốt nhất tôi nghĩ ra là:
$fullString = "ignore everything except this [text]";
$start = strpos['[', $fullString];
$end = strlen[$fullString] - strpos[']', $fullString];
$shortString = substr[$fullString, $start, $end];
Có cách nào tốt hơn để làm điều này? Nói chung, tôi biết sử dụng Regex có xu hướng kém hiệu quả hơn, nhưng trừ khi tôi có thể giảm số lượng các cuộc gọi chức năng, có lẽ đây sẽ là cách tiếp cận tốt nhất? Suy nghĩ?
Hỏi ngày 13 tháng 10 năm 2008 lúc 2:08Oct 13, 2008 at 2:08Oct 13, 2008 at 2:08
1
Tôi chỉ cần làm một regex và vượt qua nó. Trừ khi bạn đang thực hiện đủ các lần lặp lại rằng nó trở thành một vấn đề hiệu suất rất lớn, nó chỉ dễ dàng hơn để viết mã [và hiểu khi bạn nhìn lại nó]
$text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
Đã trả lời ngày 13 tháng 10 năm 2008 lúc 2:16Oct 13, 2008 at 2:16Oct 13, 2008 at 2:16
OwenowenOwenOwen
Huy hiệu vàng 81K2121 gold badges117 silver badges113 bronze badges21 gold badges117 silver badges113 bronze badges
7
Vì vậy, thực tế, mã bạn đã đăng không hoạt động: Các tham số
$text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
4 là $ chuỗi, $ start và $ length và các tham số $text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
5 là $text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
6, $text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
7. Sửa đổi một chút:$length, and $text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
5 parameters are $text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
6, $text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
7. Slightly modified:preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
3$length, and $text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
5 parameters are $text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
6, $text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
7. Slightly modified:preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
3Một số sự tinh tế: Tôi đã sử dụng
$text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
8 trong tham số bù để giúp PHP trong khi thực hiện tìm kiếm $text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
9 trên dấu ngoặc đơn thứ hai; Chúng tôi tăng preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
30 một và giảm preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
31 để loại trừ dấu ngoặc đơn khỏi trận đấu.Ngoài ra, không có kiểm tra lỗi nào trong mã này: bạn sẽ muốn đảm bảo
preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
30 và preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
33 không === Sai trước khi thực hiện preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
34.Đối với việc sử dụng
preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
35 so với Regex; Hiệu suất khôn ngoan, mã này sẽ đánh bại một biểu thức thông thường. Đó là một chút Wordier mặc dù. Tôi ăn và thở preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
35, vì vậy tôi không bận tâm đến điều này quá nhiều, nhưng người khác có thể thích sự nhỏ gọn của một regex.Một j
3,85014 Huy hiệu vàng38 Huy hiệu bạc52 Huy hiệu đồng14 gold badges38 silver badges52 bronze badges14 gold badges38 silver badges52 bronze badges
Đã trả lời ngày 13 tháng 10 năm 2008 lúc 2:18Oct 13, 2008 at 2:18Oct 13, 2008 at 2:18
Edward Z. Yangedward Z. YangEdward Z. YangEdward Z. Yang
26K16 Huy hiệu vàng79 Huy hiệu bạc108 Huy hiệu đồng16 gold badges79 silver badges108 bronze badges16 gold badges79 silver badges108 bronze badges
1
Sử dụng một biểu thức thông thường:
preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
3Đã trả lời ngày 13 tháng 10 năm 2008 lúc 3:34Oct 13, 2008 at 3:34Oct 13, 2008 at 3:34
RobrobRobRob
47.6K5 Huy hiệu vàng72 Huy hiệu bạc91 Huy hiệu Đồng5 gold badges72 silver badges91 bronze badges5 gold badges72 silver badges91 bronze badges
Tôi nghĩ rằng đây là cách nhanh nhất để có được các từ giữa dấu ngoặc đơn đầu tiên trong một chuỗi.
preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
4Đã trả lời ngày 10 tháng 4 năm 2020 lúc 4:34Apr 10, 2020 at 4:34Apr 10, 2020 at 4:34
rüff0rüff0rüff0rüff0
8251 Huy hiệu vàng12 Huy hiệu bạc26 Huy hiệu đồng1 gold badge12 silver badges26 bronze badges1 gold badge12 silver badges26 bronze badges
Các giải pháp Regex đã được đăng -
preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
37 và preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
38 - không trả lại các chuỗi trong cùng giữa một dấu ngoặc mở và đóng. Nếu một chuỗi là preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
39, cả hai đều trả về toàn bộ preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
30, chứ không phải preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
31.Mẫu phù hợp với các chất nền [sử dụng với
preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
32 để tìm nạp đầu tiên và preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
33 để tìm nạp tất cả các lần xuất hiện] trong dấu ngoặc đơn mà không có dấu ngoặc đơn mở và đóng khác ở giữa IS, nếu trận đấu sẽ bao gồm dấu ngoặc đơn:$strings = array["my name is jojo",
"my name is jojo i'm 20 years old",
"my name is jojo i'm 20 years old and 6 miles away",
"blablabla 40% my name is jojo"];
foreach [$strings as $string]
{
preg_match_all["/[[^0-9=%\s]\s?]{10,}[[0-9,.]+[^0-9=%]*]{0,2}/", $string, $match];
print_r[$match[0]];
}
2Hoặc, bạn muốn nhận được các giá trị mà không có dấu ngoặc đơn:
$strings = array["my name is jojo",
"my name is jojo i'm 20 years old",
"my name is jojo i'm 20 years old and 6 miles away",
"blablabla 40% my name is jojo"];
foreach [$strings as $string]
{
preg_match_all["/[[^0-9=%\s]\s?]{10,}[[0-9,.]+[^0-9=%]*]{0,2}/", $string, $match];
print_r[$match[0]];
}
3Thay thế
preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
34 bằng preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
35 nếu phải có ít nhất 1 char giữa preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
36 và preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
37.Details:::
38 - Một khung vòng mở [phải được thoát ra để biểu thị một dấu ngoặc đơn theo nghĩa đen vì nó được sử dụng bên ngoài một lớp nhân vật]preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
39 - 0 hoặc nhiều ký tự khác ngoàipreg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
36 vàpreg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
37 [lưu ý nhữngpreg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
36 vàpreg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
37 không phải thoát ra trong một lớp ký tự như bên trong nó,preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
36 vàpreg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
37 không thể được sử dụng để chỉ định một nhóm và được coi là parenthes theo nghĩa đen]preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
46 - Một khung tròn đóng [phải được thoát ra để biểu thị một dấu ngoặc đơn theo nghĩa đen vì nó được sử dụng bên ngoài một lớp ký tự].preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
Phần
preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
47 trong Regex thay thế khớp với preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
36 và bỏ qua giá trị khớp [với toán tử thiết lập lại đối sánh preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
49]. $strings = array["my name is jojo",
"my name is jojo i'm 20 years old",
"my name is jojo i'm 20 years old and 6 miles away",
"blablabla 40% my name is jojo"];
foreach [$strings as $string]
{
preg_match_all["/[[^0-9=%\s]\s?]{10,}[[0-9,.]+[^0-9=%]*]{0,2}/", $string, $match];
print_r[$match[0]];
}
20 là một cái nhìn tích cực đòi hỏi preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
36 phải xuất hiện ngay lập tức ở bên trái của vị trí hiện tại, nhưng preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
36 không được thêm vào giá trị khớp vì các mẫu tìm kiếm [tìm kiếm] không tiêu thụ. $strings = array["my name is jojo",
"my name is jojo i'm 20 years old",
"my name is jojo i'm 20 years old and 6 miles away",
"blablabla 40% my name is jojo"];
foreach [$strings as $string]
{
preg_match_all["/[[^0-9=%\s]\s?]{10,}[[0-9,.]+[^0-9=%]*]{0,2}/", $string, $match];
print_r[$match[0]];
}
23 là một cái nhìn tích cực đòi hỏi một char preg_match_all["/[[[^0-9=%]|\r\n|\s]{10,}[0-9,.]*]{2}/",$string,$match];
37 phải xuất hiện ngay lập tức ở bên phải vị trí hiện tại.Mã PHP:
$text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
5Output:
$text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
6Đã trả lời ngày 13 tháng 5 năm 2019 lúc 14:08May 13, 2019 at 14:08May 13, 2019 at 14:08
Wiktor Stribiżewwiktor StribiżewWiktor StribiżewWiktor Stribiżew
581K34 Huy hiệu vàng400 Huy hiệu bạc503 Huy hiệu Đồng34 gold badges400 silver badges503 bronze badges34 gold badges400 silver badges503 bronze badges
Đây là mã mẫu để trích xuất tất cả văn bản giữa '[' và ']' và lưu trữ 2 mảng riêng biệt [tức là văn bản bên trong dấu ngoặc đơn trong một mảng và văn bản bên ngoài dấu ngoặc đơn trong một mảng khác]
$text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
7Đầu ra: Trích xuất_Text ["Xin chào bạn thế nào?"]; sẽ sản xuất:
$text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
0Trích xuất_Text ["Xin chào [//www.google.com/test.mp3] Bạn có khỏe không?"]; sẽ sản xuất
$text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
1Đã trả lời ngày 29 tháng 1 năm 2014 lúc 8:22Jan 29, 2014 at 8:22Jan 29, 2014 at 8:22
1
Hàm này có thể hữu ích.
$text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
2strpos [] => được sử dụng để tìm vị trí của lần xuất hiện đầu tiên trong một chuỗi.
strrpos [] => được sử dụng để tìm vị trí của lần xuất hiện đầu tiên trong một chuỗi.
Đã trả lời ngày 2 tháng 5 năm 2017 lúc 3:46May 2, 2017 at 3:46May 2, 2017 at 3:46
Vijayvijayvijayvijay
3192 Huy hiệu bạc8 Huy hiệu đồng2 silver badges8 bronze badges2 silver badges8 bronze badges
$text = 'ignore everything except this [text]';
preg_match['#\[[.*?]\]#', $text, $match];
print $match[1];
3Đây là một chút cải thiện cho câu trả lời trước đó sẽ trả về tất cả các mẫu ở dạng mảng:
GetStringsbeted giữa ['[t] [] là [test] chuỗi [mẫu]'] sẽ trả về:
Đã trả lời ngày 8 tháng 4 năm 2019 lúc 8:21Apr 8, 2019 at 8:21Apr 8, 2019 at 8:21