6

私はいくつかのテキストを1行ずつ解析していますが、特定の行が句読点または数字で終わっている場合は、ブール値をtrueに戻したいと思います。

正規表現が最善の方法ですか、それとも一致する文字の配列で反復する必要がありますか?アレイが大きすぎてコストがかかるように感じます...

それが本当に良い方法である場合、誰かが正規表現を手伝ってくれるでしょうか?

function ends_with_punctuation_or_num($string){
   // check if the string ends with punctuation or a number
    if (/* TODO */)
        return true;
    else
        return false;
}
4

5 に答える 5

17

これをif-checkに入れてください:

preg_match("/[0-9.!?,;:]$/", $string)

これは、文字列()の終わりの直前の数字または指定された句読文字のいずれかに一致します$。一致と見なしたい他の句読文字を文字クラス(角かっこ)に追加します。

于 2012-10-12T12:22:25.043 に答える
5

句読点のUnicodeプロパティは\p{P}、または\p{Punctuation}数値の場合は\pNです。

phpでは以下を使用できます:

preg_match('/[\p{P}\p{N}]$/u', $string);

文字列が句読点または数字で終わっている場合、これはtrueを返します。

このサイトをご覧ください。

于 2012-10-12T14:14:17.040 に答える
1

echo substr("abcdef", -1); // returns "f"

http://php.net/manual/en/function.substr.php

于 2012-10-12T12:22:27.290 に答える
0

substr関数またはutf- 8mb_substrを使用できます

$last = substr($string, -1);

if($last == '.' OR is_numeric($last)) {]

ただし、UTF8文字列を使用する場合は、このように使用することをお勧めします

mb_internal_encoding('utf-8');
$last = mb_substr($string, -1);
if($last == '.' OR is_numeric($last)) {}
于 2012-10-12T12:25:43.230 に答える
0

これを行うために正規表現を使用するかどうかはわかりません。これは個人的な好みですが、正規表現は不要で読みにくいようです(速度も遅くなりますが、ここではおそらく問題ではありません)。探している文字を文字列にドロップして比較したいと思います。

$chars = '.,;\'"0123456789';
$last = substr($string, -1);

if(strpbrk($last, $chars) !== false) {}

明らかに、mb_substring()Unicodeの代わりに使用してください。

is_numeric()文字列に数字を入れる代わりに使用することもできます。しかし、これはよりシンプルで読みやすく、後で変更するのが簡単だと思います。

于 2012-10-12T17:11:02.983 に答える