我做了一个正则表达式,用第一个大写字母提取一个或多个连续的单词。我需要带有重音字母,但这些字母搞砸了表达式,产生了错误的输出。
这是一个例子: 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”不应出现。
答案 0 :(得分:2)
RewriteCond %{REQUEST_FILENAME} !-f
假设“单词”仅由字母组成,只有用空格字符分隔的单词才被认为是连续的。
答案 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',
),
)
修饰符后添加多个字母时使用大括号。
示例代码(请参阅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 ) ; }
}