दिलचस्प पोस्ट
बूट लिपिक में col-lg- *, col-md- * और col-sm- * में अंतर क्या है? जावा में पुरातन के दो सरणियों की तुलना करें? पुनर्निर्देशित करें system.out.println ग्रहण में मेवेन प्रोजेक्ट नहीं बना सकता एसक्यूएल समर्थन "नल" के बजाय "= नल" क्यों नहीं करता है? IPython नोटबुक में इंटरैक्टिव मेटप्ललिब विंडो कैसे खोल सकता हूं? .NET स्टैंडर्ड बनाम .NET कोर एक जावा प्रोग्राम में एसक्यूएल इंजेक्शन हमलों को रोकें स्पष्ट रूप से जावा में एक डिफ़ॉल्ट विधि को बुला रहा है टेक्स्ट फ़ाइल में एक पंक्ति बदलें नामस्थान क्या हैं? जावा में टाइमर कैसे सेट करें? कैसेंड्रा – सहेजे गए क्लस्टर नाम टेस्ट क्लस्टर! = कॉन्फ़िगर नाम iPhone, यूआईटीextफिल्ड के बाहर छूते हुए कीबोर्ड को खारिज कर देते हैं सही सिंगलटन पैटर्न उद्देश्य सी (आईओएस)?

PHP के साथ एक सीएसएस फ़ाइल पार्स करें

मैं PHP के साथ एक सीएसएस फाइल (विशेष तरीके से) पार्स करना चाहता हूँ।

उदाहरण:

cssfile.css :

 #stuff { background-color: red; } #content.postclass-subcontent { background-color: red; } #content2.postclass-subcontent2 { background-color: red; } 

और मैं चाहता हूं कि PHP मुझे प्रत्येक वर्ग का नाम देता है जिसमें उसके नाम पर पोस्ट क्लास होता है

परिणाम इस उदाहरण में होने वाली सरणी की तरह दिखता है:

 arrayentry1: #content.postclass-subcontent arrayentry2: #content2.postclass-subcontent2 

लेकिन मैं नियमित अभिव्यक्ति पर भी बदतर हूं। किसी तरह "पोस्टक्लैस" की खोज करें और फिर छेद लाइन को लपेटें और एक सरणी में डालें।


धन्यवाद और मैंने इसे एक सीएसएस फ़ाइल सिमलिअर को एक कनफील फाइल में पार्स करने के लिए इस्तेमाल किया।

 $(function () { $.get('main.css', function (data) { data = data.match(/(#[a-z0-9]*?\ .?postclass.*?)\s?\{/g); if (data) { $.each(data, function (index, value) { value = value.substring(0, value.length - 2); $(value.split(' .')[0]).wrapInner('<div class="' + value.split('.')[1] + '" />'); }); } }); }); 

मेरा अंतिम कोड था इसलिए मैं लेआउट का संपादन किए बिना कुछ हार्डकोड- html को आसानी से एक div को लपेट सकता हूं। इसलिए मुझे बस अपने सीएसएसफ़ाइल को संपादित करना होगा और इसमें कुछ जोड़ना होगा

id .postclass-class {कुछ शैली}

और आईडी के लिए मेरा कोड खोजता है और एक डिवेल के साथ आंतरिक सामग्री को लपेटता है मुझे उस Quickfixes के लिए आवश्यक है जब मुझे सिर्फ एक स्पष्ट या एक पृष्ठभूमि के लिए कुछ के आसपास एक div जोड़ना होगा

Solutions Collecting From Web of "PHP के साथ एक सीएसएस फ़ाइल पार्स करें"

यहाँ एक त्वरित और गंदा स्वैप हैक regex का उपयोग कर:

 $input = ' #stuff { background-color: red; } #content.postclass-subcontent { background-color: red; } #content2.postclass-subcontent2 { background-color: red; } '; $cssClassName = 'postclass'; preg_match_all('/(#[a-z0-9]*?\.?'.addcslashes($cssClassName, '-').'.*?)\s?\{/', $input, $matches); var_dump($matches[1]); 

का परिणाम:

 array(2) { [0]=> string(29) "#content.postclass-subcontent" [1]=> string(31) "#content2.postclass-subcontent2" } 

PHP में एक बहुत अच्छा सीएसएस पार्सर वर्ग है इसका इस्तेमाल करें। यहां इसका नमूना कोड है:

 <?php include("cssparser.php"); $css = new cssparser(); $css->ParseStr("b {font-weight: bold; color: #777777;} b.test{text-decoration: underline;}"); echo $css->Get("b","color"); // returns #777777 echo $css->Get("b.test","color");// returns #777777 echo $css->Get(".test","color"); // returns an empty string ?> 

मुझे एक समाधान मिला:

 function parse($file){ $css = file_get_contents($file); preg_match_all( '/(?ims)([a-z0-9\s\.\:#_\-@,]+)\{([^\}]*)\}/', $css, $arr); $result = array(); foreach ($arr[0] as $i => $x){ $selector = trim($arr[1][$i]); $rules = explode(';', trim($arr[2][$i])); $rules_arr = array(); foreach ($rules as $strRule){ if (!empty($strRule)){ $rule = explode(":", $strRule); $rules_arr[trim($rule[0])] = trim($rule[1]); } } $selectors = explode(',', trim($selector)); foreach ($selectors as $strSel){ $result[$strSel] = $rules_arr; } } return $result; } $css = parse('css/'.$user['blog'].'.php'); 

उपयोग:

 $css['#selector']['color']; 

बस पूर्णता के लिए सीएसएस को पार्स करने के लिए एक और पुस्तकालय भी है: सॉबरवॉर्म / पीएचपी-सीएसएस-पार्सर

मुखपृष्ठ: http://www.sabberworm.com/blog/2010/6/10/php-css-parser
गीथहब: http://github.com/sabberworm/PHP-CSS-Parser
सार: http://packagist.org/packages/sabberworm/php-css-parser
अंतिम अपडेट: 2014-04-10 (यह बताते हुए कि ब्लॉग प्रविष्टि की तारीख आपको भ्रमित कर सकती है कि इसे अब अपडेट नहीं किया गया है।)

दुर्भाग्य से यह परियोजना थोड़ा बहुत मजबूत है। काफी सरल सीएसएस से बहुत बातूनी संरचना बनाता है। पहले उपयोग करने से पहले आपको कम्पोज़र से निपटना होगा (मैंने खुद को प्रत्येक फ़ाइल के लिए parser.php में जोड़ दिया था)।

 <?php $css = <<<CSS #selector { display:block; width:100px; } #selector a { float:left; text-decoration:none } CSS; // function BreakCSS($css) { $results = array(); preg_match_all('/(.+?)\s?\{\s?(.+?)\s?\}/', $css, $matches); foreach($matches[0] AS $i=>$original) foreach(explode(';', $matches[2][$i]) AS $attr) if (strlen($attr) > 0) // for missing semicolon on last element, which is legal { // Explode on the CSS attributes defined list($name, $value) = explode(':', $attr); $results[$matches[1][$i]][trim($name)] = trim($value); } return $results; } var_dump(BreakCSS($css)); 

// इसे वही देखें

सीएसएस @ मीडिया प्रश्नों, बाल चयनकर्ता > बेस64 छवियों, और input[type="button"]:hover को संभालने के लिए गेब्रियल एंडरसन के जवाब के अतिरिक्त input[type="button"]:hover

 function parse_css_selectors($css,$media_queries=true){ $result = $media_blocks = []; //---------------parse css media queries------------------ if($media_queries==true){ $media_blocks=parse_css_media_queries($css); } if(!empty($media_blocks)){ //---------------get css blocks----------------- $css_blocks=$css; foreach($media_blocks as $media_block){ $css_blocks=str_ireplace($media_block,'~£&#'.$media_block.'~£&#',$css_blocks); } $css_blocks=explode('~£&#',$css_blocks); //---------------parse css blocks----------------- $b=0; foreach($css_blocks as $css_block){ preg_match('/(\@media[^\{]+)\{(.*)\}\s+/ims',$css_block,$block); if(isset($block[2])&&!empty($block[2])){ $result[$block[1]]=parse_css_selectors($block[2],false); } else{ $result[$b]=parse_css_selectors($css_block,false); } ++$b; } } else{ //---------------escape base64 images------------------ $css=preg_replace('/(data\:[^;]+);/i','$1~£&#',$css); //---------------parse css selectors------------------ preg_match_all('/([^\{\}]+)\{([^\}]*)\}/ims', $css, $arr); foreach ($arr[0] as $i => $x){ $selector = trim($arr[1][$i]); $rules = explode(';', trim($arr[2][$i])); $rules_arr = []; foreach($rules as $strRule){ if(!empty($strRule)){ $rule = explode(":", $strRule,2); if(isset($rule[1])){ $rules_arr[trim($rule[0])] = str_replace('~£&#',';',trim($rule[1])); } else{ //debug } } } $selectors = explode(',', trim($selector)); foreach ($selectors as $strSel){ if($media_queries===true){ $result[$b][$strSel] = $rules_arr; } else{ $result[$strSel] = $rules_arr; } } } } return $result; } function parse_css_media_queries($css){ $mediaBlocks = array(); $start = 0; while(($start = strpos($css, "@media", $start)) !== false){ // stack to manage brackets $s = array(); // get the first opening bracket $i = strpos($css, "{", $start); // if $i is false, then there is probably a css syntax error if ($i !== false){ // push bracket onto stack array_push($s, $css[$i]); // move past first bracket $i++; while (!empty($s)){ // if the character is an opening bracket, push it onto the stack, otherwise pop the stack if ($css[$i] == "{"){ array_push($s, "{"); } elseif ($css[$i] == "}"){ array_pop($s); } $i++; } // cut the media block out of the css and store $mediaBlocks[] = substr($css, $start, ($i + 1) - $start); // set the new $start to the end of the block $start = $i; } } return $mediaBlocks; } 

साधन