提取元素,其中某些 Unicode 字符串


extract element where certain unicode string is

好的,我已经对问题进行了一些搜索。我找不到任何解决方案。事情是这样的。我有一些带有Unicode文本的段落。我想从存在某些字符串的某个段落中提取所有字符。

$paragraphs = "<p>ареги: сейчас на Десятую, Международную, Конференцию, по</p>
       <p>которая состоится: 10-12 марта 1997 года в Майнце в Германии</p>
       <p>Конференция соберет: широкий круг экспертов по  вопросам глобального</p>
       <p>Интернета: и Unicode, локализации и интернационализации, воплощению</p>
       <p>жениях: шрифтах, верстке и многоязычных компьютерных системах</p>";

让我们说我想要包含Unicode字符串ареги的段落的内容:您可以在第一段中看到。

在这种情况下,我的结果应该是

ареги: сейчас на Десятую, Международную, Конференцию, по

我更喜欢PHP。

您尚未指定段落的数据源的位置,因此您可以使用预定义的数组(例如)实现此目的的一种方法:

<?php
// Data Source
$paragraphs = array(
    '<p>ареги: сейчас на Десятую, Международную, Конференцию, по</p>',
    '<p>которая состоится: 10-12 марта 1997 года в Майнце в Германии</p>',
    '<p>Конференция соберет: широкий круг экспертов по  вопросам глобального</p>',
    '<p>Интернета: и Unicode, локализации и интернационализации, воплощению</p>',
    '<p>жениях: шрифтах, верстке и многоязычных компьютерных системах</p>'
);
// Search Function
function search($term, $paragraphs = array()) {
    foreach ($paragraphs as $paragraph) {
        if (preg_match('/'. $term .'/', $paragraph)) {
            return $paragraph;
        }
    }
    return '';
}
// Usage
echo search('ареги', $paragraphs);
?>

编辑 v2 :如果数据源是单行 html 段落,下面是上述内容的替代版本:

<?php
// Data Source
$paragraphs = '<p>ареги: сейчас на Десятую, Международную, Конференцию, по</p>
   <p>которая состоится: 10-12 марта 1997 года в Майнце в Германии</p>
   <p>Конференция соберет: широкий круг экспертов по  вопросам глобального</p>
   <p>Интернета: и Unicode, локализации и интернационализации, воплощению</p>
   <p>жениях: шрифтах, верстке и многоязычных компьютерных системах</p>';
// Search Function
function search($term, $paragraphs) {
    $paragraphs = preg_replace('!'s+!', ' ', $paragraphs);
    $paragraphs = explode('</p> <p>', $paragraphs);
    array_walk_recursive($paragraphs, function(&$para) {
        $para = trim($para);
        $para = str_replace(array('<p>', '</p>'), '', $para);
    });
    foreach ($paragraphs as $paragraph) {
        if (preg_match('/'. $term .'/', $paragraph)) {
            return $paragraph;
        }
    }
    return '';
}
// Usage
echo search('ареги', $paragraphs);
?>
你可以

只使用strpos()mb_strpos()

如果它不适合您,那么您必须确保您的输入是 unicode。

小例子:

$paragraphs = '
    <p>ареги: сейчас на Десятую, Международную, Конференцию, по</p>
    <p>которая состоится: 10-12 марта 1997 года в Майнце в Германии</p>
    <p>Конференция соберет: широкий круг экспертов по  вопросам глобального</p>
    <p>Интернета: и Unicode, локализации и интернационализации, воплощению</p>
    <p>жениях: шрифтах, верстке и многоязычных компьютерных системах</p>
';
$pos = strpos( $paragraphs, 'ареги' );
if( $pos === false )
    echo 'not found';
else
    echo 'found';