Как выбрать значение href в регулярных выражениях? - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь получить все значения href, но не могу получить точный результат, пожалуйста, помогите нам.

Я пробовал этот шаблон

(? [\ W -] +) \s * = \ s * ((?: "(? [^">] +)))

это ссылка https://rubular.com/r/QBhBViYSWCyz4j

Пример:

<a href="#" lclick="Test_Navi('page:6f66f6dd')">
<A HREF = "page:9477be:The Page "Test Detail"">

**Output**:

Match 1:
Name    href
Value   #

Match 2:
Name:   lclick
Value:  Test_Navi('page:6f66f6dd')

Match 3:
Name:   HREF
Value:  page:9477be:Der Dialog

**Expected Output**:
Match 1:
Name    href
Value   #

Match 2:
Name    lclick
Value   Test_Navi('page:6f66f6dd')

Match 3:
Name    HREF
Value   page:9477be:Der Dialog "Test Detail"

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Хотя вы не должны использовать регулярные выражения для анализа / обработки html, но для простого извлечения текста вы можете использовать это регулярное выражение для получения желаемых совпадений от group1,

\w+\s*=\s*"([^=]*)"

Объяснение:

  • \w+ - соответствует одному или нескольким словам \w ([a-zA-Z0-9_]) символ
  • \s*=\s* - соответствует = в окружении необязательных пробельных символов
  • "([^=]*)" - это ключевая часть регулярного выражения, которая отличает его от других ответов и заставляет его работать так, как ожидалось.Значения, которые вы хотели получить, также содержали в них двойные кавычки, поэтому [^"]+ использовать нельзя, а ".*" получит больше, чем нужно.Ключевым моментом здесь является то, что все ваши пары ключ-значение разделены =, поэтому значение не может содержать этот символ, из-за чего я использовал символ [^=]* для захвата значения и жадным образом, чтобы любая из двойных кавычек присутствовалаВнутри также захватывается, ожидайте, что последние, где "([^=]*)" необходимы и делают работу, как вы хотели.

Демо

И ваша расширенная версия регулярного выражения будет такой,

(?<Name>[\w-]+)\s*=\s*((?:"(?<Value>[^=]+)"))

Rubular demo

1 голос
/ 01 апреля 2019

если вам действительно нужно имя / значение, тогда вместо всех слов используйте href [\ w -] + => href

(?<name>href)\s*=\s*((?:"(?<Value>[^">]+)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...