[英]How to output the second value in the string between the two delimiters using regex?
我正在从文本文件中获取数据。 如何获取两个分隔符之间的值,即 | 根据比赛。 前 7 个字符是 id 的一部分。
输入示例:
0123456|BHKAHHHHkk|12345678|JuiKKK121255
9100450|HHkk|12348888|JuiKKK10000000021sdadad255
所需的searchfor
: BHKAHHHHkk
基于搜索值 = 0123456
我的脚本:
$file = 'file.txt';
// the following line prevents the browser from parsing this as HTML.
header('Content-Type: text/plain');
// get the file contents, assuming the file to be readable (and exist)
$contents = file_get_contents($file);
// escape special characters in the query
$txt = explode("\n",$contents);
$counter = 0;
foreach($txt as $key => $line){
$subbedString = substr($line,2,6);
// $searchfor = '0123456';
//echo strpos($subbedString,$searchfor);
if(strpos($subbedString,$searchfor) === 0){
$matches[$key] = $searchfor;
echo "<p>" . $matches[$key] . "</p>";
$counter += 1;
if($counter==10) break;
}
preg_match
function 可用于此目的,它使您的代码非常简单易读。
每行数据都以\n
或内容开头,所以使用\n|^
作为模式的开头; 另外?:
用于防止在$matchs
变量中列出此部分。
每行数据以\n
或内容结尾结束,所以使用\n|$
作为模式的结尾; \r
可能出现也可能不出现,最后使用(?:\r?\n|$)
。
$searchfor
变量可以直接在模式中。
\|([^\n]+)
搜索行数据的分隔符和 rest。
最后,可以在$matchs[1]
变量和$matchs[2]
变量中的数据的 rest 中访问数据的第二个参数(您要查找的)。
<?php
$contents = '0123456|BHKAHHHHkk|12345678|JuiKKK121255
9100450|HHkk|12348888|JuiKKK10000000021sdadad255';
$searchfor = '9100450';
if(preg_match('/(?:\n|^)' . $searchfor . '\|([^|]+)(.*?)(?:\r?\n|$)/is', $contents, $matchs))
{
$second_value = $matchs[1];
$reset_values = $matchs[2];
echo "Result for searching <b>$searchfor</b> is <b>$second_value</b> and reset of data is <b>$reset_values</b>";
}
else echo('Not Found :(');
?>
使用正则表达式对我有用:
$input = '0123456|BHKAHHHHkk|12345678|JuiKKK121255
9100450|HHkk|12348888|JuiKKK10000000021sdadad255';
$searchfor = '12348888';
$regexp = "/(?<=" . $searchfor . "\\|)\\w+/m";
$result = preg_match_all($regexp, $input, $matches);
print_r($matches);
Output:
/*Array
(
[0] => Array
(
[0] => JuiKKK10000000021sdadad255
)
)*/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.