2015-01-30 5 views
-1

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

(?<!"")echo(?>!"") 

Я хочу, чтобы соответствовать только тогда, когда эхо не в одинарных или двойных кавычках, т.е. матч:

echo "i need help"; 

и нет:

$str = " you can use echo to print out words"; 

кстати я использую vb.net 2012

ответ

2

Способ использования групп захвата и соответствия содержимому внутри quot e до примера:

("[^"]*"|'[^']*')|\becho\b 

Если группа захвата 1 пуста, значит, вы соответствовали «эхо».

Примечание: описание содержимого между кавычками может быть улучшено для обработки экранированных кавычек.

Примечание2: если вы проецируете анализ кода PHP, вам необходимо обрабатывать синтаксисы Heredoc и Nowdoc, так как вы можете определить строку с ними.

Таким образом, полная картина становится (опция ignoreWhiteSpaces):

(?=['"<]) 
(
    # Heredoc/Nowdoc syntaxes: 
    <<<(['"]?)(\w+)\2 \r?\n # header 
    (?>.*\r?\n)*?    # content 
    \3;?\r?\n     # close the string 

    | 

    # quoted strings with escaped quotes support 

    "(?s)(?>[^\\"]+|\\.)*" 
    | 
    '(?s)(?>[^\\']+|\\.)*' 
) 

| 
    \becho\b 

demo

Преимущество этого способа является то, что она оставалась быстро независимо от размера строки, и это имеет дело с сбежавших кавычки в строках ,

Вы можете увидеть количество шагов, необходимых для получения соответствия с regex101 debugger.

Смежные вопросы