|
为excel新增一个正则表达式函数zpy2@excelhome.net
2021-11-26
excel的函数很强大,但是有时候确偏偏缺少一个需要的。正如衣服很多,却总感觉没有可以穿出来的。前两天看到一篇讨论正则表达式的帖子,提到不支持向左预查,所以想到介绍一下运用excel的webservice接口增加一个这样的函数。
excel函数原型
=webservice("http://192.168.1.104:8080/f/?regreplac~(?=张州)区~~玄武区,张州区")
这里有三个参数
1,函数名 regreplace。
2,匹配的正则表达式 (?=张州)区。
3,替换的新字符 这里替换为空白,就是删除 区。
接下来就是实现这个函数了
手机上termux操作
~/.../downloads/htdocs
$ pwd #显示当前目录位置
/data/data/com.termux/files/home/storage/downloads/htdocs
~/.../downloads/htdocs
$ mkdir f #在web根目录新建 一个f 文件夹
2个文件
vim 编辑一下两个文件
<?php
/* 作者:zpy2 @excelhome
* 协议:MIT
* 文件名:./f/index.php
*/
//需要对未编码的特殊情况编码
define("FUNCTIONSDIR",__DIR__.'/');
$_SERVER["QUERY_STRING"]=str_replace("+","%2B",$_SERVER["QUERY_STRING"]);
$_SERVER["QUERY_STRING"]=str_replace("\/","{{slash}}",$_SERVER["QUERY_STRING"]);
//解码
$_SERVER["QUERY_STRING"]=urldecode($_SERVER["QUERY_STRING"]);
if(strpos($_SERVER["QUERY_STRING"],"~")===false){
echo "函数名~参数1~参数2~参数3";
echo "<br>例如<br>";
echo "<ul>";
echo "<li><h3>正则替换api:regreplace/正则表达式/替换为/原字符串</h3>
<p><a href=\"http://club.excelhome.net/forum.php?mod=viewthread&tid=1565723&mobile=\">例如:=webservice(\"http://e.anyoupin.cn/eh3/?regreplace~(\d)(?=[A-Za-z])~$1_~RUSDO W45 ML W118ONIXO W37 HOK A461LIG R473NOLON W90POU W7SAREX W6NLG W509KEVAR\")</a>
<p><a href=\"./?regreplace~(\d)(?=[A-Za-z])~$1_~RUSDO W45 ML W118ONIXO W37 HOK A461LIG R473NOLON\">或浏览器访问</a>
</li>";
die();
}
$arr=explode("~",$_SERVER["QUERY_STRING"]);
array_walk($arr,function(&$value,$key){$value = str_replace("{{slash}}","/",$value);
});
//print_r($arr);die();
$function_name=$arr[0];
/*
这里完成了路由,是因为,解码这里我还是不是很清楚,摸着石头过河,不知道还有没有bug,还有就是为了api少.php?p=之类的输入,所以搞成这样,谁有更好的方法可以告诉我。
*/
require(FUNCTIONSDIR.'f'.$function_name.'.php');
<?php
/* 作者:zpy2 @excelhome
* 协议:MIT
*文件名:./f/fregreplace.php
*/
$patterns="/".$arr[1]."/u";
/*传入字符转义,这个很无语*/
$arr[2]=str_replace(array('\t','\n','\r'),array(chr(9),chr(10),chr(13)),$arr[2]);
$replacements="$arr[2]";
$string=$arr[3];
//print_r($arr);
echo preg_replace($patterns, $replacements, $string);
die();
关于,php环境,windows下,官网下载https://windows.php.net/download#php-8.1
运行命令行
c:/php/htdocs/php -S 0.0.0.0:8080
或者phpstudy
手机端 使用 termux
感觉说了不少,还是感觉没说清楚。如果是直接复制粘贴2个到php运行目录,感觉是不是更直白点。
arr[0];
/*
这里完成了路由,是因为,解码这里我还是不是很清楚,摸着石头过河,不知道还有没有bug,还有就是为了api少.php?p=之类的输入,所以搞成这样,谁有更好的方法可以告诉我。
*/
require(FUNCTIONSDIR.'f'.$function_name.'.php');
<?php
/* 作者:zpy2 @excelhome
* 协议:MIT
*文件名:./f/fregreplace.php
*/
$patterns="/".$arr[1]."/u";
/*传入字符转义,这个很无语*/
$arr[2]=str_replace(array('\t','\n','\r'),array(chr(9),chr(10),chr(13)),$arr[2]);
$replacements="$arr[2]";
$string=$arr[3];
//print_r($arr);
echo preg_replace($patterns, $replacements, $string);
die();
关于,php环境,windows下,官网下载https://windows.php.net/download#php-8.1
运行命令行
c:/php/htdocs/php -S 0.0.0.0:8080
或者phpstudy
手机端 使用 term
|
评分
-
3
查看全部评分
-
|