1

PHPExcel のラッパーがあり、setColumn()次のような というメソッドがあります。

public function setColumn($cell = ""){
    if(empty($cell)){
        $cell = $this->cell;
    }
    $this->column = strtoupper(preg_replace("/[^A-Za-z]/", "", $cell));
    $this->cell   = "{$this->column}{$this->row}";
    return $this;
}

それは問題なく動作しますが、使用すると、次のような範囲で渡すことができますA1:D1。そうすると、preg_replace が正しく置換されず、不要なものが返さADれます。返してほしいA。これを達成するために必要な正規表現がわかりません。

パラメータ$cellには、いくつかの異なる値を含めることができます。

  • A1戻るべきA
  • A1:D10戻るべきA
  • AD10戻るべきAD
  • AD1:BBB1戻るべきAD

リストは続く可能性がありますが、それが基本です。それで、それを達成するために私は何ができますか?

4

4 に答える 4

3

オプションのコロンよりも数字に一致し、その後のすべてに一致します

preg_replace("/\d:?.*/", "", $cell); 

または、linepoglが指摘しているように

preg_replace("/\d.*/", "", $cell); 

パターンが続く限り: 文字 数字 すべて その他

于 2013-09-03T20:05:25.160 に答える
2

試す:

preg_replace("/^([A-Z]+).*$/", "$1", $cell)

最初の部分を「保存」し、他のすべてを削除します。

regex101 デモ.

于 2013-09-03T20:05:15.890 に答える
0

あなたが何をしているのか、何をしたいのかを説明するために、以下の正規表現について説明しました。

あなたのREGEXは、配列[A-Za-z]にない(^で示される)すべての文字を大文字または小文字に置き換えるように指示しています。

あなたが望むのは、数値が解析された最初のインスタンスからすべてを削除することです。数値で一致させるには、\d を使用します。任意の文字に一致させるには、 を使用します。先行するトークンの 0 個以上に一致するには、* を使用します。これは貪欲な一致であり、次のトークンを満たす前にできるだけ多くの文字と一致します。

.* を組み合わせると、これは以下のすべてに一致します。

まとめると、 /\d.*/ でこれを達成できます。解決

それで

preg_replace("/\d.*/", "", $cell); 
于 2013-09-03T20:22:26.213 に答える