繁体   English   中英

反转php中的正则表达式

[英]reversing a regular expression in php

假设我有这个功能:

function f($string){
    $string = preg_replace("`\[.*\]`U","",$string);
    $string = preg_replace('`&(amp;)?#?[a-z0-9]+;`i','-',$string);
    $string = htmlentities($string, ENT_COMPAT, 'utf-8');
    $string = preg_replace( "`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);`i","\\1", $string );
    $string = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $string);
    return $string;
}

我该如何反转此功能...即。 我应该如何编写函数fReverse(),使我们具有以下内容:

$s = f("some string223---");
$reversed = fReverse($s);
echo $s;

输出:一些字符串223 ---

f有损。 不可能找到确切的反向。 例如, "some string223---""some string223--------"给出相同的输出(请参阅http://ideone.com/DtGQZ )。


但是,我们可以找到f原像。 f的5个替代物是:

  1. 删除[]之间的所有内容。
  2. 替换<实体 { 以及诸如< 连字符-
  3. 转义特殊的HTML字符( <&lt;&&amp;等)
  4. 删除重音字符的重音符号( &eacute; (==)→ e等)
  5. 将非字母数字和连续的连字符转换为单个连字符-

其中,1、2、4和5可能是身份转换。 因此,一个可能的原像就是相反的步骤3:

function fReverse($string) {
   return html_entity_decode($string, ENT_COMPAT, 'utf-8');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM