Php 两种模式的正则表达式
我有一个非常大的csv列表,我已经将列表转换为数组,并设法解决了我使用UTF8时遇到的一个问题:Php 两种模式的正则表达式,php,regex,Php,Regex,我有一个非常大的csv列表,我已经将列表转换为数组,并设法解决了我使用UTF8时遇到的一个问题: $lines = file(''.get_template_directory_uri() . '/lines.csv'); foreach ($lines as $line_num => $line) { if(mb_detect_encoding($line, 'utf-8', false)) { $listL
$lines = file(''.get_template_directory_uri() . '/lines.csv');
foreach ($lines as $line_num => $line)
{
if(mb_detect_encoding($line, 'utf-8', false)) {
$listLines.= $line . '<br />';
}
}
基本上我需要|
之前的所有内容,输出:
Adolfo_(São_Paulo)
秒
列表中的其他项目没有|
Abatiá (PR)
Abel Figueiredo (PA)
São Francisco de Assis do Piauí (PI)
我需要输出:
Abatiá
Abel_Figueiredo
São_Francisco_de_Assis_do_Piauí
我相信我将不得不使用正则表达式,但我对这两种情况下的规则有点困惑。基于评论。。。这个怎么样:
$lines = file(''.get_template_directory_uri() . '/lines.csv');
foreach ($lines as $line_num => $line)
{
if(mb_detect_encoding($line, 'utf-8', false)) {
$exp = '';
if(strpos($line, '|')!==FALSE){
$exp = '/^(.+?)\s*\|/';
}else{
$exp = '/^(.+?)\s*\(/';
}
preg_match($exp, $line, $matches);
if($matches){
$line = $matches[1];
$line = preg_replace('/\s+/', '_', $line);
$listLines.= $line . '<br />';
}
}
}
$lines=file(''.get_template_directory_uri()。/lines.csv');
foreach($line作为$line_num=>$line的行)
{
if(mb_检测_编码($line'utf-8',false)){
$exp='';
if(strpos($line,“|”)!==FALSE){
$exp='/^(+?)\s*\\\\;/';
}否则{
$exp='/^(+?)\s*\(/');
}
预匹配($exp,$line,$matches);
如果($匹配){
$line=$matches[1];
$line=preg_replace('/\s+/','',$line);
$listLines.=$line.“
”;
}
}
}
基于评论……这个怎么样:
$lines = file(''.get_template_directory_uri() . '/lines.csv');
foreach ($lines as $line_num => $line)
{
if(mb_detect_encoding($line, 'utf-8', false)) {
$exp = '';
if(strpos($line, '|')!==FALSE){
$exp = '/^(.+?)\s*\|/';
}else{
$exp = '/^(.+?)\s*\(/';
}
preg_match($exp, $line, $matches);
if($matches){
$line = $matches[1];
$line = preg_replace('/\s+/', '_', $line);
$listLines.= $line . '<br />';
}
}
}
$lines=file(''.get_template_directory_uri()。/lines.csv');
foreach($line作为$line_num=>$line的行)
{
if(mb_检测_编码($line'utf-8',false)){
$exp='';
if(strpos($line,“|”)!==FALSE){
$exp='/^(+?)\s*\\\\;/';
}否则{
$exp='/^(+?)\s*\(/');
}
预匹配($exp,$line,$matches);
如果($匹配){
$line=$matches[1];
$line=preg_replace('/\s+/','',$line);
$listLines.=$line.“
”;
}
}
}
检查字符串中是否存在“|”。如果存在,则在条形图上拆分并仅获取第一个子字符串。如果不存在,则在空格上拆分并获取除最后一个子字符串以外的所有子字符串
如果元素属于上述任何一种类型,并且没有第三种类型的字符串,则此操作适用于数据列表。检查字符串中是否存在“|”。如果存在,则在条形图上拆分,仅获取第一个子字符串。如果不存在,则在空格上拆分,并获取除最后一个子字符串以外的所有子字符串
如果元素属于上述任何一种类型,并且没有第三种类型的字符串,那么这应该适用于您的数据列表谢谢@sinal2013,但这将返回
Adolfoè(圣保罗)| Adolfoè(SP)
和Sèoèu Francisco_deèu Assisèu doèPiauè_
我尝试了您的更新,所有类似于阿道夫(圣保罗)
的通信都正确显示,但类似于旧金山圣路易斯·德阿西斯·多普
的匹配不会出现在列表上。这只显示具有文本(文本)的匹配
或类似的,左边或括号内有更多的单词OK…谢谢你让我知道发生了什么。我想我知道发生了什么。但是为了简化事情,可以分两部分来完成吗?如果存在,使用表达式1,其他使用nexte他们很好。谢谢。很高兴你完成了。谢谢@sinal2013,但这是返回的Adolfo|uu(圣保罗)| Adolfo_(SP)
和São Francisco_de_Assis_do_Piauíu(PI)
我尝试了您的更新,所有类似于Adolfo_(圣保罗)
的通信都正确显示,但类似于São Francisco_de_Assis_do_íu Piauíu
的匹配不会出现在列表上这只是显示具有文本的匹配
或类似内容,左边或括号内有更多单词OK…谢谢你让我知道发生了什么。我想我知道发生了什么。但为了简化事情,可以分为两部分来完成。如果存在,请使用表达式1,否则请使用nexte。太好了。谢谢。很高兴你完成了。