1

私は正規表現について少し学ぼうとしています。誰かがここで何が起こっているのか説明できますか? 期待される出力を提供する正規表現の例を挙げてください。ありがとう!

input data = 'Sometext|even more text'

regex = '(.*)?\|?.*'

replacement = '$1'

expected output = 'Sometext'

actual output = 'Sometext|even more text'

PHP

preg_filter("(.*)?\|?.*", "$1", 'Sometext|even more text'); // returns  Sometext|even more text
4

4 に答える 4

1

あなたの正規表現は、「すべての文字、その後にオプションの|、その後に0以上の文字が続く」と言っています。

イニシャル(.*)([^\|]*)に変更するか、|非オプションにします。

于 2012-04-11T14:12:31.960 に答える
1

*貪欲です。つまり、できるだけ多くのテキストに一致させようとします。この場合:

  • (.*)?すべてのテキストに一致します
  • \|?.*「残り」(空の文字列)に一致します

試す:regex = '\|[^|]*', replacement = ''

于 2012-04-11T14:13:51.710 に答える
1

正規表現を に変更すると、具体的には の後に(\w+)?\|?.*を追加すると、予想される「Sometext」の回答が得られます。+\w

文字列全体が一致していた理由は、最初の.*文字列が文字列全体に一致していたためです。上記の変更により、任意の単語文字に一致します。

于 2012-04-11T14:13:55.983 に答える
1

(.*)貪欲なので、すべてに一致します。$1それならすべてです。

あなたはおそらく探している:

/^([^|]*).*$/
于 2012-04-11T14:10:07.020 に答える