0

たとえば、私は次のようなものを持っています

何が正しくて何が間違っているかの基準の研究は_と呼ばれます。

を。純粋科学

b. 応用科学

c. 倫理

d. テクノロジー

...未知数の選択肢...

答え: C

そして私はそれをに分割したい

['The study of standards for what is right and what is wrong is called _____.',
'pure science',
'applied science',
'ethics',
'technology',

... as many array elements as there are choices ... 

'ANS: C']

任意の数の選択肢で機能する、使用できる単一の正規表現はありますか? そうでない場合、Javascript または PHP でこれを行うにはどうすればよいでしょうか?

4

2 に答える 2

1

各ソリューション間に改行があることが保証されていますか? うん...

では、次のいずれかのソリューションを使用できます。

メソッドを使用するsplitと、次のことができます。

results = myString.split(/[\r\n]+/);

次の方法を使用するmatch()と、これは改行ではない部分に一致します。

results = myString.match(/[^\r\n]+/g);

では、次のソリューションのいずれかを使用して目的のタスクを達成します。

$wanted = preg_split('~\R+(?!$)~u', $data);
print_r($wanted);

見るlive working demo

\R一般的な改行に一致します。つまり、Unicode によって改行シーケンスと見なされるものはすべてです。\vこれには、 (縦の空白) と複数文字シーケンスによって一致するすべての文字が含まれます\x0D\x0Au適切に使用するには、修飾子を有効にする必要があります。修飾子は PCREのu追加機能をオンにし、パターン文字列は UTF-8 として扱われます。

$空の空白を含めないように、(行末) の後に否定先読みを使用しました。

ここで否定を使用すると、分割と一致の使用を避けることができます。

$wanted = preg_match_all('~[^\r\n]+~', $data, $matches);
print_r($matches);

見るlive working demo

出力

Array
(
    [0] => The study of standards for what is right and what is wrong is called _.
    [1] => a. pure science
    [2] => b. applied science
    [3] => c. ethics
    [4] => d. technology
    [5] => ... unknown number of choices ...
    [6] => ANS: C
)
于 2013-11-05T02:58:35.707 に答える
0

\r\nEOL(または)に基づいて、各行を繰り返すことをお勧めします\n。次に、各行をチェックして、それが質問なのか、回答項目なのか、回答なのかを確認できます。すべてを 1 つの配列にまとめたい場合は、 を使用できますarray_push()

これも役立つかもしれません:How to put string in array, split by new line?

基本的には、前述のように各行を配列に分割するだけです:

$array = preg_split ('/$\R?^/m', $string);

于 2013-11-05T01:56:17.923 に答える