2016-09-25 2 views
0

У меня есть строка, чтобы соответствовать и дезинфицировать в Баше, например:Баш регулярного выражения для очистки некоторых символов

POST_DATA="password=this*pass&is/for?testing" 

Я хочу, чтобы соответствовать всем строкам после дезинфицирующого символа = (за исключение) это обугливает * &/?

я могу получить все, что после того, как символ = с помощью:

[[ ${POST_DATA} =~ ^password=(.*)$ ]] && password="${BASH_REMATCH[1]}" 
echo $password 

Это показывает:

this*pass&is/for?testing 

Я хочу, чтобы регулярное выражение, которое требуемый выход:

thispassisfortesting 

Я попробовал некоторые исключая шаблоны, которые не работают следующим образом:

^password=(^[^\*\?&/])*$ 

Любая идея? Благодарю.

ответ

3

расширение использования параметра, а не регулярных выражений:

#!/bin/bash 
POST_DATA="password=this*pass&is/for?testing" 
after_eq=${POST_DATA#*=}    # remove everything up to the first = 
printf '%s\n' "${after_eq//[*&\/?]}" # remove all asterisks, ampersands, slashes and question marks 
+0

Возможно использование 'printf' - этот код может завершиться неудачей с' echo', если пароль начинается с тире. – tripleee

+0

Мне это нужно, используя чистый баш. Это нормально для меня. Спасибо. – OscarAkaElvis

+0

@OscarAkaElvis: 'printf' - это встроенный bash. – choroba

0

С :

% echo "$POST_DATA" | perl -pe 's/(?:password=|[*&\/?])//g'    
thispassisfortesting 
0

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

Итак, что вы пытаетесь сделать, чтобы удалить некоторые конкретные символы для дезинфекции строки, НЕ является прецедентом для регулярных выражений. Что вам нужно, это какой-то String.replace (/ [^ * \? & /] /, ""), который удалит все нарушающие символы из вашей строки.

Предполагая, что вы работаете в PHP (на основе используемого вами ${POST_DATA}), я бы предложил использовать: preg_replace('/[^\*\?&\/]/','',${POST_DATA}) перед сопоставлением password=, чтобы удалить все символы-нарушители.

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