正则表达式的优化问题~

wint_zyc 2007-11-01 04:08:10
名位大虾~~
小弟目前写了一个正则表达式,勉强可用,但数据一多就会出错,还请各位帮小弟一帮。
此正则表达式主要功能是所控件变成html代码,如
$str = '<input id="test" value="test1">';
print $str = wn_form_data_transact( $str );
+++++++++++++++++++++++++++++++++++++++++++++++
output: <span id="test">test1</span>
+++++++++++++++++++++++++++++++++++++++++++++++
/**
* wn_form_data_transact()回调的函数
* @param array 分割出来的字符串数组
*/
function str_callback($mth){

foreach( $mth as $k => $val ){

//提取value值
if( strpos($val,'value') && ( $k != 0 ) ){
$val = strtolower(trim($val)); //把字母转成小写后进行配对
/*
* 把input值分割出来
*/
if(strpos( $val, 'value="' )){
$s = split( 'value="', $val );
$s = split( '"', $s[1] );
}elseif( strpos( $val, "value='" ) ){
$s = split( "value='", $val );
$s = split( "'", $s[1] );
}else{
$s = split( 'value=', $val );
$s[0] = $s[1];
}
}

/*
* 把select值提取出来
*/
if( strpos( strtolower($val), 'option') ){
$val = strtolower($val);
$strc = split( '<option', $val );

foreach( $strc as $sk => $sv ){
if( strpos( $sv, 'selected' ) ){
$strd = split( '>', $sv );
}
}
$s[0] = $strd[1];
}

$values = $s[0];
$values = trim($values, "'");
$values = trim($values, '"');

//提取ID值
if( trim($val) == 'id' ){
$id = $mth[$k+1];
}
}
return "<span id='".$id."'>".$values."</span>";

}

/**
* 表单分析
* @param string 字符串
*/

function wn_form_data_transact( $string ){

if( !$string ) return false;

/*
* 正则表达式
*/
$strPreg['input'] = '/<[\/\!]*?input([^<>]*?)(id)[\s]*?\=[\s]*?[\"|\']?([\d|\b|\B|\D]+?)?[\"|\']([^<>]*?)>/si';
$strPreg['select'] = '/<[\/\!]*?select[^<>]*?(id)[\s]*?\=[\s]*?[\"|\']?([\d|\b|\B|\D]+?)?[\"|\'][^<>]*?>.*?<\/select>/si';

/*
* 得到可用数据后回调一个函数替换
*/
foreach( $strPreg as $key => $val ){
$string = preg_replace_callback($val,"str_callback",$string);
}

return $string;
}
...全文
129 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wint_zyc 2007-11-02
  • 打赏
  • 举报
回复
/**
* wn_form_data_transact()回调的函数
* @param array 分割出来的字符串数组
*/
function str_callback($mth){

foreach( $mth as $k => $val ){

//提取value值
if( strpos($val,'value') && ( $k != 0 ) ){
$val = strtolower(trim($val)); //把字母转成小写后进行配对
/*
* 把input值分割出来
*/
if(strpos( $val, 'value="' )){
$s = split( 'value="', $val );
$s = split( '"', $s[1] );
}elseif( strpos( $val, "value='" ) ){
$s = split( "value='", $val );
$s = split( "'", $s[1] );
}else{
$s = split( 'value=', $val );
$s[0] = $s[1];
}
}

/*
* 把select值提取出来
*/
if( strpos( strtolower($val), 'option') ){
$val = strtolower($val);
$strc = split( '<option', $val );

foreach( $strc as $sk => $sv ){
if( strpos( $sv, 'selected' ) ){
$strd = split( '>', $sv );
}
}
$s[0] = $strd[1];
}

$values = $s[0];
$values = trim($values, "'");
$values = trim($values, '"');

//提取ID值
if( trim($val) == 'id' ){
$id = $mth[$k+1];
}
}
return "<span id='".$id."'>".$values."</span>";

}

/**
* 表单分析
* @param string 字符串
*/

function wn_form_data_transact( $string ){

if( !$string ) return false;

/*
* 正则表达式
*/
$strPreg['input'] = '/<[\/\!]*?input([^<>]*?)(id)[\s]*?\=[\s]*?[\"|\']?([\d|\b|\B|\D]+?)?[\"|\']([^<>]*?)>/si';
$strPreg['select'] = '/<[\/\!]*?select[^<>]*?(id)[\s]*?\=[\s]*?[\"|\']?([\d|\b|\B|\D]+?)?[\"|\'][^<>]*?>.*?<\/select>/si';

/*
* 得到可用数据后回调一个函数替换
*/
foreach( $strPreg as $key => $val ){
$string = preg_replace_callback($val,"str_callback",$string);
}

return $string;
}
fdclf 2007-11-01
  • 打赏
  • 举报
回复
能不能贴一份好一点的代码呀。。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧