checkfasta という関数を作成しました。そのコードは以下のとおりです
function checkfasta($seq)
{
if(strpos($seq, ">", 0) === "FALSE")
{
$dna = preg_replace("/[^ATCG]/", "", strtoupper($seq));
return $dna;
}
else
{
$descst = strpos($seq, ">", 0);
$seqst = strpos($seq, "\n", $descst);
if(substr_count($seq, ">") == 1)
{
$seqen = strlen($seq);
}
else
{
$seqen = strpos($seq, ">", $seqst)-1;
}
$exseq = substr($seq, $seqst+1, ($seqen-$seqst));
$dna = preg_replace("/[^ATCG]/", "", strtoupper($exseq));
return $dna;
}
}
ユーザー入力からシーケンスを抽出しようとしています。ユーザーが次のような生のシーケンスを指定した場合:
ATGCTAGCTATTAGCTAGCTAGCTACGATCCAC
プログラムは文字列全体を変数として受け取る必要があります。ユーザーが次のようなシーケンスを指定した場合:
>シーケンス
ATGCTAGCTATTAGCTAGCTAGCTACGATCCAC
プログラムは、2 行目から始まるシーケンス全体を取得する必要があります。
上記の関数はそれを行うために作成されましたが、関数をこのように使用している場合:
<?php
include "functions.php";
$seq1 = "GCTAGCTAGCTACGTACGACTGCTAGTAC";
$seq2 = ">Sequence
GCTAGCTAGCTACGTACGACTGCTAGTAC";
echo checkfasta($seq1)."<br>";
echo checkfasta($seq2)."<br>";
?>
これは私が得ている出力です:
CTAGCTAGCTACGTACGACTGCTAGTA
GCTAGCTAGCTACGTACGACTGCTAGTAC
生のシーケンスのみが指定されている場合、最初と最後の文字が削除されます。
誰でも私がどこで間違っているのか説明してもらえますか?