需要对字符串执行特定的正则表达式

时间:2016-07-26 11:00:52

标签: regex

我需要帮助对字符串执行regexp:

这是字符串的示例:

(
    (nissan NEAR leaf) OR 
    env200 OR 
    "e nv200" OR 
    (
        (leaf OR evalia) NEAR (
            nismo OR 
            eletrico OR 
            "veiculo eletrico" OR 
            carregar OR 
            autonomia OR 
            hibrido OR 
            "zero emission" OR 
            recarregavel OR 
            "plug in" OR 
            electrified
        )
    )
) NOT (
    flor OR 
    fruto OR 
    "arvore jovem" OR 
    frutos OR 
    flores OR 
    "arvores jovem" OR 
    vegetal OR 
    vegetais OR 
    corrida OR 
    "drag racing" OR 
    "prova de arranques" OR 
    "desporto automovel" OR 
    "desporto motorizado" OR 
    automobilismo OR 
    "a venda" OR 
    "vende se" OR 
    "usado nissan" OR 
    "carro usado" OR 
    negocios OR 
    negocios OR 
    oferta OR 
    ofertas OR 
    policia OR 
    vendas OR 
    concessionario OR 
    concessionarios OR 
    licenca OR 
    patrocinio OR 
    patrocinador OR 
    "contrato de aluguer" OR 
    leasing OR 
    locacao OR 
    arrendar OR 
    "em segunda mao" OR 
    cardeals
)

我想用我的正则表达式匹配单词+字母+数字不带引号(简单或双重)而忽略带引号的单词(简单或双重)。

例如在这个字符串中,我应该匹配这个词:env200。

你有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

首先,您需要使用此正则表达式删除所有括号和它们之间的单词。

['"][\w\s]+['"]

然后使用字符串产生并提取单词

\b([\w]+)\b

您没有指定编程语言(因为每种编程语言的正则表达式引擎都不同)。

在PHP中,你会这样做:

$myString = '((nissan NEAR leaf) OR nv200 OR "e nv200" OR ((leaf OR evalia) NEAR (nismo OR eletrico OR "veiculo eletrico" OR carregar OR autonomia OR hibrido OR "zero emission" OR recarregavel OR "plug in" OR electrified))) NOT (flor OR fruto OR "arvore jovem" OR frutos OR flores OR "arvores jovem" OR vegetal OR vegetais OR corrida OR "drag racing" OR "prova de arranques" OR "desporto automovel" OR "desporto motorizado" OR automobilismo OR "a venda" OR "vende se" OR "usado nissan" OR "carro usado" OR negocios OR negocios OR oferta OR ofertas OR policia OR vendas OR concessionario OR concessionarios OR licenca OR patrocinio OR patrocinador OR "contrato de aluguer" OR leasing OR locacao OR arrendar OR "em segunda mao" OR cardeals)';


$myString = preg_replace(
    "/['\"][\w\s]+['\"]/",
    "",
    $myString
);

$words = array();

if (preg_match_all(
    "/\b([\w]+)\b/",
    $myString,
    $words
)) {
    $total = count($words[0]);

    for ($index = 0; $index < $total; $index++) {

        var_dump($words[0][$index]);
    }
}

您可以在此处进行测试:http://sandbox.onlinephpfunctions.com/code/60a64961bdce706db0ee735c785e1830a514089f