2016-10-02 8 views
0

Мне нужна помощь с регулярными выражениями, потому что я не очень хорошо знаком. До сих пор я создал следующее регулярное выражение:Добавить исключения в сложное регулярное выражение (lookahead и lookbehind)

/\b(?<![\#\-\/\>])literal(?![\<\'\"])\b/i 

В https://regex101.com/ состояниях:

\ б позиции утверждают, на границе слова (^ \ ш | \ ш $ | \ W \ ш | \ ш \ W)

Отрицательный касательно предшествующего текста (?])

Утверждай что Regex ниже не соответствует

матча один символ в списке ниже [# - />]

# соответствует символ # в буквальном смысле (чувствительно к регистру)

- соответствует символу - в буквальном смысле (чувствительно к регистру)

/соответствует символу/буквально (чувствительно к регистру)

> соответствует символу> буквально (чувствительно к регистру)

буквальных спички символов буквальных буквальным LY (чувствительно к регистру)

Отрицательный Lookahead (?! [\ < \ "\"])

Утверждай что ниже Regex не соответствует

Совпадение одного символа настоящего в приведенном ниже списке [\ < \ '\ "]

\ < соответствует символу < буквально (чувствительно к регистру)

\' соответствует гр haracter "буквально (чувствительно к регистру)

\ "соответствует символу" буквально (чувствительно к регистру)

\ б позиции утверждают, на границе слова (^ \ ш | \ ш $ | \ W \ ш | \ ш \ W)

Глобальные флаги модели

я модификатор: нечувствительны. Без учета регистра матч (игнорирует случай [A-Za-Z])

Я хочу добавить два исключения из этого правила согласования. 1), если «>» предшествует «p», то есть, например, стартовый тег <p>, чтобы соответствовать только литералу. 2) Также литерал должен соответствовать только тогда, когда < указан /p, то есть, например, закрывающий тег </p>. Как это можно достичь?

Пример: только жирные должны совпадать.

<p> 
    **Literal** in computer science is a 
    <a href='http://www.google.com/something/literal#literal'>literal</a> 
    for representing a fixed value in source code. Almost all programming 
    <a href='http://www.google.com/something/else-literal#literal'>languages</a> 
    have notations for atomic values such as integers, floating-point 
    numbers, and strings, and usually for booleans and characters; some 
    also have notations for elements of enumerated types and compound 
    values such as arrays, records, and objects. An anonymous function 
    is a **literal** for the function type which is **LITERAL** 
</p> 

Я знаю, что у меня слишком сложные вещи, но ситуация осложняется сама собой, и я думаю, что у меня нет другого пути.

+2

Можете ли вы привести пример ввода и вывода, что вы пытаетесь сделать с этим? С каким языком программирования вы используете регулярное выражение? – 4castle

+0

@ 4castle Я добавил пример. Не могли бы вы изменить его, как прежде? Не знаю, как добавить фактический html. – dpesios

+2

Какой язык программирования? Похоже, вам нужен парсер HTML, а не регулярное выражение. Пожалуйста, прочитайте о проблеме [XY] (http://mywiki.wooledge.org/XyProblem). – 4castle

ответ

0

Если текст, который вы ищете это просто текст смешивается с некоторыми <a> тегами, то вы можете упростить < и > частей на lookarounds, и дать определенную строку, что она не должна сопровождаться: </a>.

/\b(?<![-#\/])literal(?!<\/a>)\b/i 

Regex101 Demo

+0

Спасибо! Хороший подход, не думал об этом. – dpesios