2012-03-09 20 views
1

これは私の最初の投稿ですが、この素晴らしいサイトを使用しました。RegEx for PHP特定のHTMLタグと特定の文字とを別の文字列で置き換えます。

とにかく、私は正規表現を吸っていますが、私は自分がしなければならないものが必要だと思います。

短い質問: 私は<code></code>のいずれかの発生の間'&nbsp;'とスペース' 'を交換する必要があります。

詳細:

私のコードセクションがあるため、余分なスペース(私はasumingてる)の他のすべての行余分な行を作成したので、この背後にある動機でした。スペースを&nbsp;に置き換えることによって、コードを正しくフォーマットすることができました。

しかし、これは私のHTMLにたくさんの余分な文字を導入しました。それは非効率的であるばかりでなく、word-wrap: break-word;は単語全体を動かすのではなく、単語を半分に分割します。

+0

あなたには、コードを使用することができます構文を使用して質問します。特定の文字をエスケープして質問に表示することもできます。エスケープ文字は '\\'です。 – hakre

答えて

0

免責事項:これはあなたが必然的に到着する解決策ではないと思いますが、他の答えは既にここではあなたの仕事を達成するために何をすべきかを示しています。

しかし、あなたが正規表現でそれをしたいと思っているとしましょう。私たちは<code>stuff</code>で、ものは、ネストされたコードタグが含まれていないだろうという仮定を作ることができると思うので、あなたはそれをあなたの短い質問を達成することができますが、あなたはまだカップルの手順が必要になります。

//sorry for the c#, the but intent should translate clearly. 
string input = @"<div>whatever</div> id='tricky'><code>adsfasd fasdfasdfvar data = "" 8 5.00000000 8.0 9.000000"";var re = /(\.0{0,2})(0*)/g; var match = re.exec(data);alert(data.replace(re, RegExp.1));</code><p>more stuff with stuff.</p>"; 
var code = Regex.Match(input, "<code>(.*?)</code>").Value; 
var munged = Regex.Replace(code, @"\s", "&nbsp;"); 
var result = Regex.Replace(input, "<code>(.*?)</code>", munged); 
+0

phpで、 'preg_replace_callback'は' Regex'の最初と最後の呼び出しを組み合わせることを可能にします –

+0

正規表現を動作させるために最善を尽くしましたが、何をしているのか分かりません。私はPHPのバージョンで助けが必要ですが、HTMLコードタグの代わりに、BBCodeコードタグ[code]と[/ code]を見つけて、これらのタグの間にテキストを入れてスペースを置き換える必要があります。 –

+0

私は他の誰かの助けを借りてそれを得ることになった[リンク] http://stackoverflow.com/questions/9640670/php-regex-get-text-between-bbcode-tags [/ link] –

1

まず、正規表現ではなく、DOMです。 PHPの場合:

foreach(DOMDocument::loadHTML($source)->getElementsByTagName('code') as $code) { 
    foreach($code->childNodes as $node) { 
     // assumes no elements, otherwise check nodeType == 3 
     // and recurse into elements 
     $node->textContent = str_replace(" ","\xC2\xA0", $node->textContent); 
    } 
} 

これを表すエンティティではなく、実際のスペース文字を使用することができます(DOMが必要です)。

しかし、それらの余分な行がより良いで制御することができます。

code {white-space: nowrap;} 

またはwhite-space: pre/white-space: pre-line

CSSソリューションのコピー&のペースト可能性があります。さもなければ& nbspの例では "WTF !?"解析エラー。

(あなたがいずれかを使用している場合)また、あなたのCMS /マークアップコンバータを確認するには、それが<pre>/white-space:pre要素の行を倍増自動的<br>を挿入しません。

+0

DOMDocumentで '  'をどのように挿入するかは実際には分かりません;) – hakre

+0

これは明白です。 – Kornel

+0

DOMDocumentはUTF-8エンコーディングを使用します。'" \ xa0 "は、UTF-8 - >' utf8 "\ xA0に対して無効な文字です。" Unicodeにマップされません。世話をする。 – hakre

1

代わりにCSSでそれを実行します。

code {white-space: nowrap;} /* or */ code {white-space: pre;} 

white-space CSS property­Docsを参照してください。

+0

私はすべての異なるホワイトスペースCSSを試してみましたが、どれも正しく動作しませんでした。私は何が起こっているのか分からない。 –

+0

おそらく 'code'をブロックモードに変換する必要があります:' code {display:block;} 'か、その親要素を使用します。 ['code' HTML Element](https://developer.mozilla.org/en/HTML/Element/code)を参照してください。 – hakre

関連する問題