Генерация привязки БОЛЬШОГО ГЛОТКА с CMake

Вот функция, которую я записал для этой задачи:

static string SanitizeHtml(string html)
{
    string acceptable = "script|link|title";
    string stringPattern = @"</?(?(?=" + acceptable + @")notag|[a-zA-Z0-9]+)(?:\s[a-zA-Z0-9\-]+=?(?:(["",']?).*?\1?)?)*\s*/?>";
    return Regex.Replace(html, stringPattern, "sausage");
}

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

я объясню regex немного, потому что это немного длинно.

первая часть соответствует открытой скобке и 0 или 1 наклонной черте (в случае, если это - близкий тег).

Следующий Вы видите если тогда конструкция со взглядом вперед. (? (? =SomeTag) then|else) я проверяю, чтобы видеть, является ли следующая часть строки одним из приемлемых тегов. Вы видите, что я связываю строку regex с приемлемой переменной, которая является приемлемыми именами тега, разделенными verticle панелью так, чтобы любое из условий соответствовало. Если бы это - соответствие, Вы видите, что я вставляю слово "notag", потому что никакой тег не соответствовал бы этому и если приемлемо, что я хочу оставить его в покое. Иначе я еще иду дальше к часть, где я соответствую любому имени тега [a-z, A-Z, 0-9] +

Затем, я хочу соответствовать 0 или больше атрибутам, которые я принимаю, находятся в атрибуте формы = "значение". таким образом, теперь я группирую эту часть, представляющую атрибут, но я использую?: препятствовать тому, чтобы эта группа была получена для скорости: (?:\s [a-z, A-Z, 0-9,-] + =? (?: (["" ']?). ? \1?))

Здесь я начинаю с пробельного символа, который был бы между тегом и названиями атрибута, затем соответствовать названию атрибута: [a-z, A-Z, 0-9,-] +

следующий я соответствую, равняется знаку, и затем любой кавычке. Я группирую кавычку, таким образом, она будет получена, и я могу сделать обратную ссылку позже \1 для соответствия тому же типу кавычки. Промежуточный эти две кавычки, Вы видите, что я использую период для соответствия чему-нибудь, однако я использую ленивую версию *? вместо жадной версии * так, чтобы это только соответствовало до следующей кавычки, которая закончила бы это значение.

следующий мы помещаем * после закрытия групп с круглой скобкой так, чтобы это соответствовало нескольким attirbute/value комбинациям (или ни один). В последний раз мы соответствуем некоторому пробелу \s и 0 или 1 конечной наклонной черте в теге для стиля xml сам закрывающие тэги.

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

7
задан joemoe 30 September 2009 в 15:44
поделиться

1 ответ

Вы можете найти пример здесь .

Фрагмент:

Следующий пример представляет собой входной файл CMake для создания оболочки Python для файла интерфейса SWIG, example.i:

 # Это пример CMake для Python

FIND_PACKAGE (ТРЕБУЕТСЯ SWIG)
ВКЛЮЧИТЬ ($ {SWIG_USE_FILE})

НАЙТИ ПАКЕТ (PythonLibs)
INCLUDE_DIRECTORIES ($ {PYTHON_INCLUDE_PATH})

INCLUDE_DIRECTORIES ($ {CMAKE_CURRENT_SOURCE_DIR})

НАБОР (CMAKE_SWIG_FLAGS "")

SET_SOURCE_FILES_PROPERTIES (пример.i СВОЙСТВА CPLUSPLUS ON)
SET_SOURCE_FILES_PROPERTIES (example.i PROPERTIES SWIG_FLAGS "-включить все")
SWIG_ADD_MODULE (пример python example.i example.cxx)
SWIG_LINK_LIBRARIES (например, $ {PYTHON_LIBRARIES})
9
ответ дан 7 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: