用第一个大写字母提取一个或多个连续的单词

时间:2016-02-20 12:50:26

标签: php regex

我做了一个正则表达式,用第一个大写字母提取一个或多个连续的单词。我需要带有重音字母,但这些字母搞砸了表达式,产生了错误的输出。

这是一个例子: http://www.phpliveregex.com/p/eHE(选择preg_match_all)

我的正则表达式:

/([ÁÉÍÓÚÑA-Z]+[a-záéíóúñ]*[\s]{0,1}){1,}/

测试字符串:

  

Esto es una prueba para extraer diferentes nombres de personascomoFernándezDíaz,Logroño,la Comunidad Valenciana,otambiénsiglascomo AVE,y cualquier cosa que empiece pormayúsculaytenga una o varias palabras。

在这种情况下,“úscula”,“én”不应出现。

2 个答案:

答案 0 :(得分:2)

RewriteCond %{REQUEST_FILENAME} !-f

假设“单词”仅由字母组成,只有用空格字符分隔的单词才被认为是连续的。

演示:http://www.phpliveregex.com/p/eHG

答案 1 :(得分:2)

如评论所示,匹配包含所有重音版本的字母的方法是将\p escape sequence\h(unicode)修饰符结合使用:

  

当选择UTF-8模式时,可以使用其他转义序列来匹配通用字符类型。

     

\ p {XX}
   具有xx属性的字符

     

L Letter包括以下属性:Ll,Lm,Lo,Lt和Lu   Ll小写字母
  Lm修饰符字母
  Lo其他信件
  标题案例信函
  Lu大写字母

你可以这样使用这个正则表达式:

\p

此表达式检查匹配不是以水平空格($text = "Esto es una prueba para extraer diferentes nombres de personas " . "como Fernández Díaz, Logroño, la Comunidad Valenciana, o también " . "siglas como AVE, y cualquier cosa que empiece por mayúscula " . "y tenga una o varias palabras."; preg_match_all('/\b(?![\h,])(?:[\h,]*\p{Lu}\pL*)+/u', $text, $matches); var_export($matches); )开头,也不是逗号,而是匹配由这些空格分隔的单词。如果这不是你想要的,你可以删除逗号,或者另一方面,如果你想要的话,可以添加其他标点符号。

请注意,PHP要求您在array ( 0 => array ( 0 => 'Esto', 1 => 'Fernández Díaz, Logroño', 2 => 'Comunidad Valenciana', 3 => 'AVE', ), ) 修饰符后添加多个字母时使用大括号。

请参阅PHP Live Regex

示例代码(请参阅eval.in):

array (
  0 => 
  array (
    0 => 'Esto',
    1 => 'Fernández Díaz',
    2 => 'Logroño',
    3 => 'Comunidad Valenciana',
    4 => 'AVE',
  ),
)

输出:

import yaml
import yamlordereddictloader

datas = yaml.load(open('myfile.yml'), Loader=yamlordereddictloader.Loader)

如果没有正则表达式中的逗号,'FernándezDíaz,Logroño'最终会出现在单独的比赛中:

public abstract class Car
{
    public abstract String getManufacturer() ;

    protected String plate_number = null ;

    public String getPlateNumber()
    { return this.plate_number ; }

    public boolean isRegistered()
    { return ( this.plate_number != null ) ; }
}