preg_match和我的字符串

时间:2013-03-13 11:09:00

标签: php preg-match

我想要这种字符串:

基本上是一串字母a-zA-Z,可以(或不能)以à或è或“或”结尾。

我这样做了:

preg_match('/^[a-zA-Z]+[a-zA-Z]+$|^[a-zA-Z]+[àèìòù]?$/', $word)

我仍然认为没事,但由于某种原因它不能胜任这个工作!

编辑: 有一些意大利语姓氏可以以àèìò结尾,但其他一些只是以字母结尾。我想知道字符串的结尾可以用àèìòù或字母结束。

这是完整的代码

if ( preg_match('/^[a-zA-Z]+[àèìòù]?$/', $word) ) {
    echo "0";

} else {
    echo LASTNAME_ERROR;
}

但是当我执行它时,它会给我带来LASTNAME_ERROR

3 个答案:

答案 0 :(得分:1)

根据你的描述,我会按照以下方式制定正则表达式:

/^[a-zA-Z]+[àèìòù]?$/

然而,根据您的问题,目前尚不清楚您的问题究竟在哪里。你的正则表达式看起来有点冗长,但没有错,它会解释你的问题(至少不是我)。

编辑 重新阅读问题后,我看到一件事:变量$word可能包含UTF-8编码数据。如果是这种情况,您需要将u (PCRE_UTF8) modifier添加到正则表达式:

/^[a-zA-Z]+[àèìòù]?$/u
                     ^
                     `--- UTF-8 modifier

反过来也是如此:如果您的应用程序尚未使用UTF-8但PHP文件以UTF-8编码,则上述正则表达式也无效。

所以检查字符串和PHP文件的字符编码,这是我可以假设在这里可能出错的一件事。

答案 1 :(得分:0)

好的,让我们回顾一下你的一些正则表达式,这样你就可以看到你出错了。

/^[a-zA-Z]+[a-zA-Z]

所以一个或多个a-zA-Z,然后是a-zA-Z。那真的很无趣: /^[a-zA-Z]+就足够了。

^[a-zA-Z]+[àèìòù]?$/

所以a-zA-Z一次或多次,然后是一个或多个符号。嗯,这与你原来的正则表达非常相似,所以让我们把它剪掉并重新组合起来。

/^[a-zA-Z]+[àèìòù]?$/

所以我们有一次或多次a-zA-Z,然后是符号,在字符串末尾有0次或更多次。 请注意,Hakre首先设计了这个答案。我只想解释你的一些错误。

答案 2 :(得分:0)

这应该是工作

/((?!\(à|è|ì|ò|ù)$)[a-zA-Z])+/

(            # start a group for the purposes of repeating
 (à|è|ì|ò|ù) # negative lookahead assertion for the pattern à|è|ì|ò|ù
 [a-zA-Z]    # your own pattern for matching a URL character
)+           # repeat the group