سؤال

لذلك أنا جديد جدا في البرمجة بشكل عام، لذلك قد يكون هذا سؤالا غبائيا، لكنني أحاول تحديدا استخدام Regexes لتجريد علامة CSS. أساسا لدي هذا:

.style1 {  
    font-size: 24px;  
    font-weight: bold;  
    color: #FFEFA1;  
} 

وأريد أن تبدو وكأنها هذه:

.style1:color:#FFEFA1

أريد الحفاظ على اسم النمط والسمات الملونة والألوان عرافة، مع القولون بين وليس مسافات. كنت أحاول شيئا مثل ما يلي لجعل هذا يحدث:

$strip =~ s/\w+\}|\w+^#([0-9a-fA-F]{3})|([0-9a-fA-F]{6})//;

لكنها لا تعمل. أي شخص يهتم أن يضعني على المسار الصحيح؟

هتافات.

هل كانت مفيدة؟

المحلول

إذا كنت تعرف أنه سيكون هناك سمة ملونة داخل $strip يمكنك استخدام

$strip =~ s!\s*{.*color:\s*(#[0-9a-f]{6});.*}!:color:$1!is;

أشياء يجب ملاحظتها:

  • i المعدل يفعل مطابقة حالة غير حساسة
  • s معدل يعني أن "." حرف يطابق أي حرف بما في ذلك الخطوط الجديدة

نصائح أخرى

هذا، مثل معظم إجابات بيرل، يبدأ ب "استخدام CPAN". كل ما تريد القيام به قد فعلت من قبل.

use CSS;

my $css = CSS->new();

$css->read_string('
.style1 {
font-size: 24px;
font-weight: bold;
color: #FFEFA1;
} 
');

$color = $css->get_style_by_selector('.style1')
             ->get_property_by_name('color')
             ->values;

باستخدام وحدات مثل CSS من CPAN تعني أن شخصا ما قد اعتبر بالفعل حالات الحافة التي لم تفعلها حلول Regex الخاصة بك. انصح:

.someClass, div.otherClass, #someid {
    color: #aa00aa
}

الحصول على اللون باستخدام Regexes لمحدد معين، فقط حصلت على أصعب بكثير.

لقد كتبت هذا في قذيفة بيئة Plan9port، لكن منافذها بسهولة لأي لينكس.

هذا القليل من التعليمات البرمجية ينشئ البرنامج النصي SED لتغليف بياناتك.

#!/usr/local/plan9/bin/rc
# .style1:color:#FFEFA1
cat > this.sed <<EOF
# for lines which start with .
/\./{
# strip open curly brace
s, {,:,
# store element tag
h
# skip to next line
n
}

# strip close curly brace
/}/d

# for other lines
{
# remove spaces
s, ,,g
# get rid of ; at end
s,;$,,g
# pull back in the element tag
G
# join to one line
s,\n,,
# shift element tag to the start
# sed in plan 9 is a little different
# for gnu sed, use \( \) and \+
s,(.*)(\.[^.]+$),\2\1,
# finally print something
p
}
EOF

هذا القليل من التعليمات البرمجية يدير مدخلاتك مقابل البرنامج النصي SED،

cat | sed -n -f this.sed <<EOF
.style1 {
font-size: 24px;
font-weight: bold;
color: #FFEFA1;
}
EOF

لتوليد هذا الإخراج.

.style1:font-size:24px
.style1:font-weight:bold
.style1:color:#FFEFA1

يمكنك GREP من أجل الخطوط التي تريدها، أو "Grep -v" تلك التي لا تفعلها.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top