我有以下我已经成功使用的正则表达式:
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.*)/