2009-10-18 5 views
0

Не могли бы вы указать мне на ошибку в моем регулярном выражении?Соответствующие китайские иероглифы с регулярными выражениями (php)

/[\x{4e00}-\x{9fa5}]*[.\s]*\[\/m\][\x{4e00}-\x{9fa5}]/u

Моя строка начинается с символа (китайского [\x{4e00}-\x{9fa5}]), за которым следует любой символ и заканчивается «[/ м]» и другой китайский символ. Таким образом, строка, возможно, может выглядеть следующим образом:

我... some text goes here (contains any characters including spaces and new lines)... [/m]我

Но, к сожалению, мое регулярное выражение не работает, как ожидалось.

+0

Что именно не работает? Слишком много или слишком мало или совсем нет? –

ответ

1

Похоже, что вы, вероятно, захотите заменить первый «*» на «+», чтобы убедиться, что у вас есть хотя бы один совпадающий символ в исходном месте, и вы можете сбросить группу символов с помощью «\ s» и просто использовать ' «. поскольку это будет соответствовать любому персонажу. Кроме того, если это должна быть полная строка, я бы начал регулярное выражение с помощью «^» и закончил его «$».

+0

все еще не работает ... – 2009-10-18 20:47:17

1
  1. Если в начале должен быть только один китайский символ, отбросьте первый '*'.
  2. Однако вы должны сохранить '[. \ S]', потому что '.' не соответствует новых строк (я думаю).
  3. Как только это будет сделано, убедитесь, что проблема связана с регулярным выражением, а не с кодом php.
0
/[\x{4e00}-\x{9fa5}][.\s]*\[\/m\][\x{4e00}-\x{9fa5}]/um 
0
[\x{4e00}-\x{9fa5}]+.+\[\/m\][\x{4e00}-\x{9fa5}] 

, который соответствует вашему описанию:

[\x{4e00}-\x{9fa5}]+ -> Один или более символов между 4E00 и 9FA5.

.+ -> Один или несколько других символов

\[\/m\] -> [/ м]

[\x{4e00}-\x{9fa5}] -> Один символ между 4E00 и 9FA5

Смежные вопросы