我有一个服务器应用程序,用俄语单词查找压力。最终用户写了一个单词 жажда 。服务器从另一个服务器下载一个页面,其中包含每个案例/变量的撇号所指示的压力,如 жа'жда 。我需要在下载的页面中找到该单词。
在俄语中,压力总是在元音之后写出来。到目前为止,我一直在使用正则表达式,它是所有可能组合的组合 (жа'жда|жажда') 。是否有一个更优雅的解决方案只使用正则表达式而不是创建一个PHP脚本来创建所有这些组合?
编辑:
答案 0 :(得分:0)
如果我理解你的问题, 有这些选择(d' isder | di' sorder | dis' order | diso' rder | dis' der | disord' er | disde | r | disorder ')其中一个在下载的页面中,我需要找出它是哪个 这可能适合您的需求:
<pre>
<?php
$s = "d'isorder|di'sorder|dis'order|diso'rder|disor'der|disord'er|disorde'r|disorder'|disorde'";
$s = explode("|",$s);
print_r($s);
$matches = preg_grep("@[aeiou]'@", $s);
print_r($matches);
答案 1 :(得分:0)
<?php
function find_stresses($word, $haystack) {
$pattern = preg_replace('/[aeiou]/', '\0\'?', $word);
$pattern = "/\b$pattern\b/";
// word = 'disorder', pattern = "diso'?rde'?r"
preg_match_all($pattern, $haystack, $matches);
return $matches[0];
}
$hay = "something diso'rder somethingelse";
find_stresses('disorder', $hay);
// => array(diso'rder)
您没有指定是否可以有多个匹配,但如果没有,您可以使用preg_match
代替preg_match_all
(更快)。例如,在意大利语中,我们有àncora
和ancòra
:P
显然,如果使用preg_match
,结果将是字符串而不是数组。
答案 2 :(得分:0)
基于您的代码,以及不排除任何功能和无序的要求。我想这就是你想要的。我添加了一个测试向量。
<pre>
<?php
// test code
$downloadedPage = "
there is some disorde'r
there is some disord'er in the example
there is some di'sorder in the example
there also' is some order in the example
there is some disorder in the example
there is some dso'rder in the example
";
$word = 'disorder';
preg_match_all("#".preg_replace("#[aeiou]#", "$0'?", $word)."#iu"
, $downloadedPage
, $result
);
print_r($result);
$result = preg_grep("#'#"
, $result[0]
);
print_r($result);
// the code you need
$word = 'also';
preg_match("#".preg_replace("#[aeiou]#", "$0'?", $word)."#iu"
, $downloadedPage
, $result
);
print_r($result);
$result = preg_grep("#'#"
, $result
);
print_r($result);