我想使用preg_match_all()
提取以下三种图书。
$input_lines = "Sed ut perspiciatis, **Book 22, 1-3, 3-4. 5.** unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, **Bk. 5, 8-14**, totam rem aperiam eaque ipsa, quae ab illo (see **BookName 16:1, 6-7, 10-13**) inventore veritatis et quasi architecto beatae vitae dicta sunt, explicabo. Nemo enim ipsam voluptatem"
一本书后面跟着一个数字,后跟逗号或冒号以及可选的许多其他数字,用逗号分隔或用短划线分隔。一段时间也用于分开书籍的各个部分。
我试着靠近了:
preg_match_all("/(\w+.*?)\w+/", $input_lines, $output_array);
答案 0 :(得分:0)
代码:
$input_lines="Sed ut perspiciatis, Book 22, 1-3, 3-4. 5. unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, Bk. 5, 8-14, totam rem aperiam eaque ipsa, quae ab illo (see BookName 16:1, 6-7, 10-13) inventore veritatis et quasi architecto beatae vitae dicta sunt, explicabo. Nemo enim ipsam voluptatem";
$regex="/Bo?o?k\.?(?:Name)?[0-9 .:,-]*(?:\d|\.)/";
if(preg_match_all($regex,$input_lines,$output_array)){
echo "<pre>";
var_export($output_array[0]);
echo "</pre>";
}else{
echo "No Match";
}
输出:
array (
0 => 'Book 22, 1-3, 3-4. 5.',
1 => 'Bk. 5, 8-14',
2 => 'BookName 16:1, 6-7, 10-13',
)
Regex Demo&amp; Code Demo
正则表达式细分:
Bo?o?k\.?(?:Name)? #Matches: "Book", "Bk.", and "BookName"
[0-9 .:,-]* #Matches: digits, space, dot, colon, comma, and dash (greedily)
(?:\d|\.) #Concludes matching on digit or dot marking the end of string