我有一个ID.txt文件,如下所示:
"http://something.net/something-ak/41389_718783565_1214898307_q.jpg"
"http://something.net/something-ak/372142_106502518141813_1189943482_q.jpg"
and so on
我想使用PHP打开文件并删除第一个“_”之前的所有内容以及第二个“_”之后的所有内容,所以我结束了这个:
718783565
106502518141813
and so on
我真的不知道该怎么做。
这是我到目前为止所做的:
<?PHP
$file_handle = fopen("ID.txt", "rb");
while (!feof($file_handle) ) {
$line_of_text = fgets($file_handle);
$parts = explode('\n', $line_of_text);
// Remove everything before the first "_" and everything after the last "_".
// echo the line
}
fclose($file_handle);
?>
有人可以帮我填空吗?
答案 0 :(得分:2)
这就是我要做的,虽然正则表达式可能更短或更有效:
$file_handle = fopen("ID.txt", "rb");
while (!feof($file_handle) )
{
$line_of_text = fgets($file_handle);
$parts = explode("\n", $line_of_text);
foreach ($parts as $str)
{
$str_parts = explode('_', $str); // Split string by _ into an array
array_shift($str_parts); // Remove first element
echo current($str_parts)."\n"; // echo current element and newline
// Same as $str_parts[0]
}
}
fclose($file_handle);
演示:http://codepad.org/uFbVDtbR
没什么大不了的,但$lines
可能是更好的变量名,而不是$parts
。
如果您确实需要将此内容写回文件,则可以执行以下操作:
ob_start();
// code used above
$new_content = ob_get_clean();
file_put_contents("ID.txt", $new_content);
相关参考文献:
答案 1 :(得分:2)
只需在循环中使用file
$content = "";
foreach(file("ID.txt", FILE_SKIP_EMPTY_LINES) as $line){
$parts = explode('_', $line);
$content .= $parts[1] . "\n";
}
file_put_contents("ID.txt", $content);
如果您想通过awk实现此目的,
awk -F _ '{print $2}' ID.txt
答案 2 :(得分:0)
试试这个
的preg_match(&#39; /(* )(+)( *)/&#39;??,$线,$匹配);
$ matches [2]将提供所需的字符串
答案 3 :(得分:0)
这应该有效
<?php
// open files
$file_handle = fopen("ID.txt", "rb");
$new_file_handle = fopen("ID2.txt", "wb");
while (!feof($file_handle) ) {
$str = fgets($file_handle);
$start = strpos($str, '_'); // find first "_"
$end = strpos($str, '_', $start + 1); // find next "_"
$newstr = substr($str, $start + 1, $end - $start - 1) . "\n";
fputs($new_file_handle, $newstr);
}
// close files
fclose($file_handle);
fclose($new_file_handle);
// rename
rename("ID2.txt", "ID.txt");
答案 4 :(得分:0)
$TXT = file_get_contents(__DIR__.'/in.txt');
$NewTXT = preg_replace('~^.+/[0-9]+_([0-9]+)_.+?$~mi', '$1', $TXT);
file_put_contents(__DIR__.'/out.txt', $NewTXT);
只需相应地重命名.txt文件。