regex - examples - regular expression شرح



لماذا يسبب الفضاء نمط تذكر في سيد لإخراج أشياء مختلفة (1)

كما ترون الفرق هو استخدام نمط الجشع .* في التعبير العادي الثاني بعد " بدون مساحة.

السبب في أنه يتصرف بشكل مختلف لأن هناك اقتباس مزدوج بعد no_but_why= كذلك و .* كونه نمط الجشع هو مطابقة حتى الماضي " قبل /> في التعبير العادي الثاني.

في التعبير الأول الخاص بك "\(.*\)" هو مطابقة فقط "bob3" لأن هناك مسافة بعد هذا الأمر الذي يجعل محرك ريجكس منع .* مطابقة حتى آخر اقتباس مزدوج في المدخلات.

لتجنب هذا الوضع يجب أن تستخدم فئة حرف ينفي بدلا من مطابقة الجشع.

النظر في هذه الأمثلة القيادة سيد:

sed -e 's/.*value="\([^"]*\)" .*/\1/' <<< "$abcs"
bob3

sed -e 's/.*value="\([^"]*\)".*/\1/' <<< "$abcs"
bob3

الآن يمكنك أن ترى كل من الأمر ينتجون نفس الانتاج bob3 لأن الطبقة حرف ينفي [^"]* سوف تتطابق حتى يحصل المقبل " لا حتى آخر " في المدخلات كما هو الحال مع .* .

أحاول الحصول على قيمة إدخال القيمة في هذا الخط شمل عبر محطة لذلك أنا باستخدام سيد.

abcs='<param name="abc" value="bob3" no_but_why="4"/>'

echo $abcs | sed -e 's/.*value="\(.*\)" .*/\1/'
echo $abcs | sed -e 's/.*value="\(.*\)".*/\1/'

الإخراج هو:

bob3
bob3" no_but_why="4

لماذا الطريق الثاني دون الفضاء يسبب أكثر من مجرد ما أردت أن تطبع بها؟ لماذا يتأثر \ 1 بهذا