Я использую это регулярное выражение:
[']?[%]?[^"]#([^#]*)#[%]?[']?
в этом тексте:
insert into table (id,name,age) values ('#var1#' ,#var2#,'#var3#', 3, 'name') where id = '#id#' like ""
and test=<cfqueryparam value="#id#">
По какой-то причине он ловит запятую между #var2#
и '#var3#'
, но когда явключай [^,]
он начинает делать странные вещи.Может ли кто-нибудь помочь мне с этим.
Когда я читаю свое регулярное выражение сейчас, оно должно найти что-нибудь, что:
- может иметь одну кавычку
- может иметьПроцент
- не имеет двойной кавычки
- , затем имеет хеш (
#
) - , за которым не следует хеш, но все остальные символы
- затем имеет хеш, за которым следует процент или кавычка
Так почему же, когда я добавляю "без запятой" перед ним, разрывается регулярное выражение ??
Обновленный вопрос:
хорошо, попробую объяснить: запрос может выглядеть следующим образом:
SELECT e.*, m.man_id, m.man_title, c.cat_id, c.cat_name
FROM ec_products e, ec_categories c, ec_manufacturers m
WHERE c.cat_id = e.prod_category AND
e.prod_manufacturer = m.man_id AND
e.prod_title LIKE <cfqueryparam value="%#attributes.keyword#%"> and
test='#var1#'
ORDER BY e.prod_title
Теперь я хочу, чтобы каждое значение находилось в диапазоне ##
, но не в значениях, окруженных тегом queryparam,Так что в примере я хочу #var1#
, но не #attributes.keyword#
.Причина этого заключается в том, что все параметры в запросе, которые не окружены тегом, небезопасны и могут вызвать внедрение SQL.Мое текущее регулярное выражение -
(?!")'?%?#(?!\d)[\w.\(\)]+#%?'?(?!")
, и оно почти там.Он находит attributes.keyword
из-за %
.Я просто хочу все, что имеет ##
, но не заключено в двойные кавычки, поэтому не "##"
.Это даст мне все небезопасные параметры в sql, такие как '#var#'
, или #aNumber#
, или '%##'
, или '%##%'
, или '##%
, но НЕ такие вещи, как
<cfqueryparam value="#variable#">
.Надеюсь, вы понимаете мои намерения?