Update: If you do not want to open file by file, you can create a PHP script to scan a directory for HTML file searching or another case. See:
This script will run through Terminal / PowerShell , then you will receive a parameter which will be the directory to be scanned. Use the glob
function to scan the directory, it will receive a parameter that will be "{$Dir}/*.html"
and will return an array if it has found something, if it does not find it, return an empty array and false
in case of error.
Before using the script below, make a backup!
// Conta quantos argumentos foi informado.
// O primeiro argumento sempre será o nome do arquivo.
$CountArgs = count($argv);
// Verifica se é menor que 2
if ($CountArgs < 2) {
echo "Informe um diretório!\n\n";
exit(0);
}
// Verifica se o argumento é um diretório.
else if ( !is_dir($argv[1]) ) {
echo "O parâmetro informado não é um diretório!\n\n";
exit(0);
}
// Guarda o argumento na variável.
$Dir = $argv[1];
// Varre o diretório atrás de arquivos html
// depois percorre a array e executa a função.
foreach (glob("{$Dir}/*.html") as $arquivo) {
alterar_links($arquivo);
}
function alterar_links($Arquivo) {
// Lê o arquivo, e guarda o conteúdo na variável
$Conteudo = file_get_contents($Arquivo);
// Faz a busca usando a expressão regular
// e modifica usando um callback
$Alteracoes = preg_replace_callback("|<li>([\w\s]+)<a(.*?)>(.*?)<\/li>|",
function($retorno) {
return "<li><a{$retorno[2]}>{$retorno[1]}</a></li>";
},
$Conteudo);
// Abre o arquivo em modo escrita
$arquivo = fopen($Arquivo,'w+');
// Escreve as alterações no arquivo
fwrite($arquivo, $Alteracoes);
// Fecha
fclose($arquivo);
}
Important : Note that when I make the change, I'm not leaving space between the li
tag and the a
: <li><a{$retorno[2]}>{$retorno[1]}</a></li>
tag. Doing so, if the script reads the file, it does not make any changes.
References:
Sublime Text
You can use Regular Expressions to streamline the process, see:
<li>([\w\s]+)<a(.*?)>(.*?)<\/li>$
Explanation:
-
(.*?)
: Captures the text inside tag "a" including tag closing
-
<a(.*?)>
: Captures attributes of tag "a"
-
([\w\s]+)
: Captures text before tag "a"
To use in Sublime Text, press CTRL+H
then ALT+R
to activate Regular Expression search, in the Find field place the above code, already in the Replace field:
<li><a$2>$1</a></li>
Explanation:
-
$ 1 : Places captured text before tag "a"
-
$ 2 : Places captured attributes of tag "a"
Note that I used [\w\s]+
instead of [a-zA-Z0-9 ]+
because you can retrieve everything you are before, [a-zA-Z0-9 ]+
will only capture letters, numbers and spaces.