首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用正则表达式提取多语言内容

如何使用正则表达式提取多语言内容
EN

Stack Overflow用户
提问于 2011-07-26 13:45:58
回答 3查看 139关注 0票数 1

我应该以这种方式从文本结构中提取多语种内容:

一些意大利文本/it英语文本/en bla bla bla

其他文本其他意大利语/it其他英语文本/en bla bla bla

我将摘取所有不附在beetwen多语种方括号内的案文和附在beetwen当前语文方括号内的案文。

例如,如果当前语言为"en“,我将提取以下文本:

一些文本英语文本bla

其他英文文本

如何使用正则表达式正确提取文本?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-26 13:51:46

喜欢

代码语言:javascript
复制
 $result = preg_replace_callback("~\[ (\w+) \] (.*?) \[ /\\1 \]~sx", 
       function($m) { return $m[1] == "en" ? $m[2] : ""; },
       $text);
票数 2
EN

Stack Overflow用户

发布于 2011-07-26 13:50:34

假设这些标记是正确平衡的,并且永远不会嵌套(这看起来是一个合理的假设),您可以这样做:

代码语言:javascript
复制
$result = preg_replace('%\[it\].*?\[/it\]\s*|\[/?en\]\s*%s', '', $subject);

它专门查找和删除[it]-enclosed文本(以及[en]标记本身)。

解释:

代码语言:javascript
复制
\[it\]     # Match [it]
.*?        # and everything that follows until 
\[/it\]    # the nearest [/it]
\s*        # plus any trailing whitespace
|          # or
\[/?en\]   # Match [en] or [/en]
\s*        # plus any trailing whitespace

如果您想删除除[en]标记之间的文本之外的任何标记之间的文本,那么它会变得更加复杂(仍然假定没有嵌套标记):

代码语言:javascript
复制
$result = preg_replace('%\[(?!/?en\b)([^\]]+)\].*?\[/\1\]\s*|\[/?en\]\s*%s', '', $subject);

解释:

代码语言:javascript
复制
\[         # Match [
(?!/?en\b) # Assert that this is not an [en] tag
([^\]]+)   # Match and capture the tag name (anything until the next ])
\]         # Match ]
.*?        # and everything that follows until 
\[/\1\]    # the nearest corresponding closing tag
\s*        # plus any trailing whitespace
|          # or
\[/?en\]   # Match [en] or [/en]
\s*        # plus any trailing whitespace
票数 1
EN

Stack Overflow用户

发布于 2011-07-26 14:35:32

我认为最好不要使用preg_replace

代码语言:javascript
复制
$languages = array(
      'en'=>array(
          'label' => 'english label'
      ),
      'it'=>array(
          'label' => 'italian label'
      )
    );

    $language = "it";
    $someTextForItalian = "bla bla bla bla %s bla bla bla.";    
    $someTextForItalian = 
         sprintf(
           $someTextForItalian,
           $languages[$language]['label']
         );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6830970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档