0

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

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

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

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

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

我更喜欢PHP。

4

2 回答 2

1

您还没有指定段落的数据源在哪里,所以这是使用预定义数组(例如)实现此目的的一种方法:

<?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);

?>
于 2013-10-22T23:00:56.633 回答
0

你可以只使用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';
于 2013-10-22T22:55:45.417 回答