Preg_match和我的字符串


preg_match and my string

我想要这样的字符串:

基本上是由字母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

根据您的描述,我将正则表达式表述如下:

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

然而,从你的问题不清楚你的问题到底在哪里。你的正则表达式看起来有点冗长,但并没有错到可以解释你的问题(至少对我来说不是)。

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

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

反过来也是如此:如果您的应用程序还没有使用UTF-8,但是PHP文件是用UTF-8编码的,那么上面的正则表达式也无效。

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

好了,让我们回顾一下你的正则表达式,这样你就能知道你哪里出错了。

/^[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次或多次。要注意的是,哈克先设计了这个答案。我只是想解释一下你的一些错误

这应该是工作

/((?!'(à|è|ì|ò|ù)$)[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