使用w.*的正则表达式模式不匹配以外部字符开头的文本,如Ä


Regex pattern using w.* not matching text starting with foreign characters such as Ä

我有以下我已经成功使用的正则表达式:

preg_match_all('/('d+)'n('w.*)'n('d{3}'.'d{3}'.'d{2})'n('d.*)'n('d.*)/', $text, $matches)

然而,我刚刚发现,如果('w.*)部分匹配的文本以外部字符(如Ä)开头,则它不匹配任何内容。

谁能帮助我正确的模式应该是什么,而不是('w.*)匹配以任何字符开头的字符串?

多谢

如果确实想要匹配变音符,那么添加正则表达式/u修饰符,或者使用'pL代替'w。这将允许正则表达式匹配ASCII范围之外的字母。

参考:http://www.regular-expressions.info/unicode.html
和http://php.net/manual/en/regexp.reference.unicode.php

Ä是一个德语Umlaut,如果我没记错的话。'w匹配(大多数口味)[a-zA-Z0-9_]

您需要匹配所需的unicode字符范围。

'x{00C4} (php)等于您想要的字符。您可能需要创建一个字符类来支持unicode字符。

你可能不得不切换到使用unicode字符…

就像ascii一样,你会使用['u0021-'u007e]在这种情况下…也许['u0021-'u007e'u0192-'u687]

我不太确定你想要的字符范围,但我认为'w只匹配正常ascii范围内的东西

考虑使用:

/('d+)'n(('p{L}|'p{N}|_).*)'n('d{3}'.'d{3}'.'d{2})'n('d.*)'n('d.*)/