Убедитесь, что начало и конец строки могут быть сопоставлены, в противном случае не удается выполнить регулярное выражение - PullRequest
0 голосов
/ 21 января 2010

У меня есть это регулярное выражение:

{link=([^|{}]+)|([^|{}]+)|([^|{}]+)}

это прекрасно работает и возвращает мне три группы между символами канала, т.е. this, that и blah из {link=this|that|blah}. До тех пор, пока в тексте нет пробела или двух фигурных скобок (поскольку они являются зарезервированными словами в моем конструкторе тегов.)

Однако я все еще получаю совпадение, если я проверяю строку 'fsdjklrwenklw' или что-нибудь в этом отношении, я думаю, это потому, что не имеет значения, совпадает ли * {link= "или нет, так как любая строка будет сопоставлено в самой первой обратной ссылке.

Возможно, ужасно написано, кто-нибудь может мне помочь? Я должен возвращать ссылки только для строк, которые начинаются с "{link=" и заканчиваются на "}".

PS. Я пробовал простой префикс и суффикс \A \z, это не помогает.

Спасибо.

1 Ответ

2 голосов
/ 21 января 2010

Вам необходимо экранировать символы |.

Ваше регулярное выражение анализируется как {link=([^|{}]+) | ([^|{}]+) | ([^|{}]+)}. Символ | означает «или», поэтому он соответствует либо первой части, либо второй части первой части.

Вам нужно написать {link=([^|{}]+)\|([^|{}]+)\|([^|{}]+)}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...